Пример #1
0
    def _setupInspector(self):
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F12'] = QShortcut(self)
        shortcut['F12'].setContext(Qt.ApplicationShortcut)
        shortcut['F12'].setKey(Qt.Key_F12)
        shortcut['F12'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)
class WebView(QWebView):

    def __init__(self, parent, realpath):
        super(WebView, self).__init__(parent)
        self.mainapp = parent

        # create an obj for communicate with js
        self.jsobj = JsObj(parent)
        self.page().mainFrame().addToJavaScriptWindowObject("picota", self.jsobj)

        self._home = "file:///%s/www/remote.html" % realpath.replace("\\", "/")
        self.gohome()

        # Inspector (for debug ..)
        settings = self.page().settings()
        settings.setAttribute(settings.DeveloperExtrasEnabled, True)
        self.inspector = QWebInspector()
        self.inspector.setPage(self.page())

    def gohome(self):
        self.load(QUrl(self._home))

    def goto(self, url):
        self.load(QUrl(url))

    def eval(self, text):
        # code = json.dumps(text)
        code = text
        return self.page().mainFrame().evaluateJavaScript(code)
Пример #3
0
class WebViewPlus(QWebView):
    """
    WebView 커스터마이징
     - inspector 추가
     - jsconsole 로그 추가
     - webview에서 document로 이벤트를 발생함.
    """

    customEvent = """
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent("{type}", true, true, {detail} );
    document.dispatchEvent(event);
    """

    def __init__(self):
        super().__init__()
        self.setPage(WebPagePlus())
        self._setupInspector()

    def _setupInspector(self):
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F12'] = QShortcut(self)
        shortcut['F12'].setContext(Qt.ApplicationShortcut)
        shortcut['F12'].setKey(Qt.Key_F12)
        shortcut['F12'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)

    def _toggleInspector(self):
        """
        F12키를 다시 누르면 "개발자 도구"가 사라짐
        """
        # self.webInspector.setVisible(not self.webInspector.isVisible())
        self.devTool.setVisible(not self.devTool.isVisible())

    # webview의 document에 이벤트를 발생함.
    def fireEvent(self, type, detail):
        self.page().mainFrame().evaluateJavaScript(WebViewPlus.customEvent.format(type=type, detail=detail))
Пример #4
0
	def __init__(self):
		super(WebPage, self).__init__()
		self.inspector = QWebInspector()
		self.inspector.setPage(self)
		self.inspector.resize(1024, 400)
		diskCache = QNetworkDiskCache(self)
		diskCache.setCacheDirectory(assets.fs.dataPath() + '/Cache')
		self.networkAccessManager().setCache(diskCache)
		self.networkAccessManager().setCookieJar(assets.dataJar)
Пример #5
0
 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))
     self._page = WebPage(self)
     self.setPage(self._page)
     self.inspector.setPage(self._page)
     self.clear()
    def __init__(self, parent):
        super(WebInspector, self).__init__(parent)
        vbox = QVBoxLayout(self)
        self._webInspector = QWebInspector(self)
        vbox.addWidget(self._webInspector)
        self.btnDock = QPushButton(translations.TR_UNDOCK)
        vbox.addWidget(self.btnDock)

        ExplorerContainer.register_tab(translations.TR_TAB_WEB_INSPECTOR, self)
        IDE.register_service('web_inspector', self)
Пример #7
0
class WebPage(QWebPage):
	def __init__(self):
		super(WebPage, self).__init__()
		self.inspector = QWebInspector()
		self.inspector.setPage(self)
		self.inspector.resize(1024, 400)
		diskCache = QNetworkDiskCache(self)
		diskCache.setCacheDirectory(assets.fs.dataPath() + '/Cache')
		self.networkAccessManager().setCache(diskCache)
		self.networkAccessManager().setCookieJar(assets.dataJar)

	def acceptNavigationRequest(self, frame, request, type):
		if(type == QWebPage.NavigationTypeLinkClicked):
			url = request.url().toString()
			if(frame == self.mainFrame()):
				self.view().load(url)
				return False
			elif frame == None:
				# self.createWindow(QWebPage.WebBrowserWindow, url)
				webbrowser.open(request.url().toString())
				return False
		return QWebPage.acceptNavigationRequest(self, frame, request, type)

	# def downloadRequested(self, request):
	# 	print(request)

	def findText(self, text):
		return super(WebPage, self).findText(text, QWebPage.FindBackward)

	def showInspector(self):
		self.inspector.show()
		self.inspector.activateWindow()

	def hideInspector(self):
		self.inspector.close()

	def createWindow(self, type, url = None):
		from window import Window
		window = Window(self.view().parentWidget(), url, isDialog = (type == QWebPage.WebModalDialog))
		return window.webView.page()

	def javaScriptAlert(self, frame, msg):
		QMessageBox.information(self.view().parentWidget(), None, msg)

	def javaScriptConfirm(self, frame, msg):
		return QMessageBox.question(self.view().parentWidget(), None, msg) == QMessageBox.Yes

	# There is a bug in PyQt
	# def javaScriptPrompt(self, frame, msg, defaultValue):
	# 	result = QInputDialog.getText(self.view().parentWidget(), None, msg)
	# 	return (result[1], result[0])

	def close(self):
		self.hideInspector()
		assets.dataJar.save()
Пример #8
0
    def setup_inspector(self):
        '''
            This code from http://agateau.com/2012/02/03/pyqtwebkit-experiments-part-2-debugging/
        '''
        page = self.web_view.page()
        page.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.web_inspector = QWebInspector(self)
        self.web_inspector.setPage(page)

        shortcut = QShortcut(self)
        shortcut.setKey(Qt.Key_F12)
        shortcut.activated.connect(self.toggle_inspector)
        self.web_inspector.setVisible(False)
Пример #9
0
    def show_inspector(self):
        """
        Show web inspector bound to QmxGraph page.
        """
        if not self._inspector_dialog:
            from PyQt5.QtWebKit import QWebSettings
            QWebSettings.globalSettings().setAttribute(
                QWebSettings.DeveloperExtrasEnabled, True)

            dialog = self._inspector_dialog = QDialog(self)
            dialog.setWindowTitle("Web Inspector")
            dialog.setWindowFlags(dialog.windowFlags()
                                  | Qt.WindowMaximizeButtonHint)
            dialog.resize(800, 600)
            layout = QGridLayout(dialog)
            layout.setContentsMargins(0, 0, 0, 0)  # no margin to web view

            from PyQt5.QtWebKitWidgets import QWebInspector
            inspector = QWebInspector(dialog)
            inspector.setSizePolicy(QSizePolicy.Expanding,
                                    QSizePolicy.Expanding)
            inspector.setPage(self.inner_web_view().page())
            inspector.setVisible(True)
            layout.addWidget(inspector)

        self._inspector_dialog.show()
Пример #10
0
    def __init__(self, file_info, parent=None):
        super(Ace, self).__init__(parent)
        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.parent = parent
        self.file_info = file_info
        self.language = EditorHelper.lang_from_file_info(file_info)
        self.waitForReady = False
        self.loop = QEventLoop()

        settings = self.settings()
        settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
        settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.inspector = QWebInspector(self)
        showInspectorAction = QAction('showInspector', self)
        showInspectorAction.triggered.connect(self.showInspector)
        self.addAction(showInspectorAction)

        self.modificationChanged.connect(self.modification_changed)
        self.main_frame().javaScriptWindowObjectCleared.connect(self.__self_js)
        pckg, file_name = 'ace_editor', 'ace_editor.html'
        resource = pkg_resources.resource_string(pckg, file_name)
        html_template = str(resource, 'utf-8')
        #insert file content
        with open(self.file_info.absoluteFilePath(), 'r') as f:
            text = f.read()
            text = html.escape(text)
            html_template = html_template.replace('{{ content }}', text)
        base_url = QUrl.fromLocalFile(os.path.dirname(__file__))

        self.setHtml(html_template, base_url)
        self.modified = False

        if not self.waitForReady:
            self.loop.exec()
Пример #11
0
    def showInspector(self):
        dlg = QDialog(self)
        dlg.setAttribute(Qt.WA_DeleteOnClose)
        dlg.resize(800, 500)
        dlg.setWindowTitle("Qgis2threejs Web Inspector")

        wi = QWebInspector(dlg)
        wi.setPage(self._page)

        v = QVBoxLayout()
        v.setContentsMargins(0, 0, 0, 0)
        v.addWidget(wi)

        dlg.setLayout(v)
        dlg.show()
        dlg.exec_()
Пример #12
0
 def __init__(self,
              splitter: miscwidgets.InspectorSplitter,
              win_id: int,
              parent: QWidget = None) -> None:
     super().__init__(splitter, win_id, parent)
     qwebinspector = QWebInspector()
     self._set_widget(qwebinspector)
Пример #13
0
    def _setupWebview(self):
        settings = self.settings()
        currentPath = QDir.currentPath()
        settings.setAttribute(QWebSettings.LocalStorageEnabled, True)
        settings.setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True)
        settings.setAttribute(QWebSettings.OfflineWebApplicationCacheEnabled,
                              True)
        settings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        settings.setAttribute(QWebSettings.CSSGridLayoutEnabled, True)
        settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanCloseWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
        settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        settings.setOfflineStoragePath(currentPath + "/storage/offline")
        settings.setOfflineWebApplicationCachePath(currentPath +
                                                   "/storage/webcache")
        settings.setLocalStoragePath(currentPath + "/storage/local")
        settings.setOfflineStorageDefaultQuota(5 * 1024 * 1024)
        settings.setOfflineWebApplicationCacheQuota(5 * 1024 * 1024)
        settings.enablePersistentStorage()
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F4'] = QShortcut(self)
        shortcut['F4'].setContext(Qt.ApplicationShortcut)
        shortcut['F4'].setKey(Qt.Key_F4)
        shortcut['F4'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)
Пример #14
0
 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))
     self._page = WebPage(self)
     self.setPage(self._page)
     self.inspector.setPage(self._page)
     self.clear()
Пример #15
0
    def __init__(self, parent):
        super(WebInspector, self).__init__(parent)
        vbox = QVBoxLayout(self)
        self._webInspector = QWebInspector(self)
        vbox.addWidget(self._webInspector)
        self.btnDock = QPushButton(translations.TR_UNDOCK)
        vbox.addWidget(self.btnDock)

        ExplorerContainer.register_tab(translations.TR_TAB_WEB_INSPECTOR, self)
        IDE.register_service('web_inspector', self)
Пример #16
0
    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)
Пример #17
0
def createTabWidget(parent, inspector=False):
    tabWidget = QtWidgets.QTabWidget(parent)
    tabWidget.setWindowTitle('cesium数字地球')
    tabWidget.setLayout(QVBoxLayout())
    webview = QWebView()  # QWebEngineView()
    webview.settings().setAttribute(QWebSettings.WebGLEnabled, True)
    webview.settings().setAttribute(QWebSettings.AcceleratedCompositingEnabled,
                                    True)
    url = "http://localhost:8080/Apps/HelloWorld.html"
    webview.load(QUrl(url))
    webview.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
    if inspector:
        inspector = QWebInspector()
        inspector.setPage(webview.page())
        splitter = QSplitter(parent)
        splitter.addWidget(webview)
        splitter.addWidget(inspector)
        tabWidget.layout().addWidget(splitter)
    else:
        tabWidget.layout().addWidget(webview)

    return tabWidget, webview
Пример #18
0
    def setup_inspector(self):
        """
            This code from http://agateau.com/2012/02/03/pyqtwebkit-experiments-part-2-debugging/
        """
        page = self.web_view.page()
        page.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.web_inspector = QWebInspector(self)
        self.web_inspector.setPage(page)

        shortcut = QShortcut(self)
        shortcut.setKey(Qt.Key_F12)
        shortcut.activated.connect(self.toggle_inspector)
        self.web_inspector.setVisible(False)
Пример #19
0
class WebInspector(QDialog):

    def __init__(self, parent, page):
        QDialog.__init__(self, parent)
        self.setWindowFlags(self.windowFlags() | Qt.WindowMinMaxButtonsHint)
        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)
Пример #20
0
class WebInspector(QDialog):
    def __init__(self, parent, page):
        QDialog.__init__(self, parent)
        self.setWindowFlags(self.windowFlags() | Qt.WindowMinMaxButtonsHint)
        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)
Пример #21
0
    def __init__(self, parent, realpath):
        super(WebView, self).__init__(parent)
        self.mainapp = parent

        # create an obj for communicate with js
        self.jsobj = JsObj(parent)
        self.page().mainFrame().addToJavaScriptWindowObject("picota", self.jsobj)

        self._home = "file:///%s/www/remote.html" % realpath.replace("\\", "/")
        self.gohome()

        # Inspector (for debug ..)
        settings = self.page().settings()
        settings.setAttribute(settings.DeveloperExtrasEnabled, True)
        self.inspector = QWebInspector()
        self.inspector.setPage(self.page())
Пример #22
0
    def _setupWebview(self):
        settings = self.settings()
        currentPath = QDir.currentPath()
        settings.setAttribute(QWebSettings.LocalStorageEnabled, True)
        settings.setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True)
        settings.setAttribute(QWebSettings.OfflineWebApplicationCacheEnabled, True)
        settings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        settings.setAttribute(QWebSettings.CSSGridLayoutEnabled, True)
        settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanCloseWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
        settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        settings.setOfflineStoragePath(currentPath + "/storage/offline")
        settings.setOfflineWebApplicationCachePath(currentPath + "/storage/webcache")
        settings.setLocalStoragePath(currentPath + "/storage/local")
        settings.setOfflineStorageDefaultQuota(5 * 1024 * 1024)
        settings.setOfflineWebApplicationCacheQuota(5 * 1024 * 1024)
        settings.enablePersistentStorage()
        
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F4'] = QShortcut(self)
        shortcut['F4'].setContext(Qt.ApplicationShortcut)
        shortcut['F4'].setKey(Qt.Key_F4)
        shortcut['F4'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)
class WebInspector(QWidget):
    """WebInspector widget class"""
    def __init__(self, parent):
        super(WebInspector, self).__init__(parent)
        vbox = QVBoxLayout(self)
        self._webInspector = QWebInspector(self)
        vbox.addWidget(self._webInspector)
        self.btnDock = QPushButton(translations.TR_UNDOCK)
        vbox.addWidget(self.btnDock)

        ExplorerContainer.register_tab(translations.TR_TAB_WEB_INSPECTOR, self)
        IDE.register_service('web_inspector', self)

    def refresh_inspector(self):
        """Refresh WebInspector widget by hiding and showing"""
        self._webInspector.hide()
        self._webInspector.show()

    def set_inspection_page(self, page):
        """Method to load an argument page object on the WebInspector"""
        self._webInspector.setPage(page)
        self._webInspector.setVisible(True)
Пример #24
0
 def setupUi(self):
     self.view = webview.WebView()
     self.view.setAcceptHoverEvents(True)
     scene = QGraphicsScene()
     scene.addItem(self.view)
     scene.setActiveWindow(self.view)
     self.gview = QGraphicsView(scene, self)
     self.gview.setFrameShape(QFrame.NoFrame)
     self.gview.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
     self.gview.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
     mainLayout = QVBoxLayout()
     mainLayout.addWidget(self.gview)
     mainLayout.setContentsMargins(0, 0, 0, 0)
     mainLayout.setSpacing(0)
     self.setLayout(mainLayout)
     if "dev" in sys.argv:
         print("Dev mode")
         inspector = QWebInspector()
         inspector.setPage(self.view.page())
         inspector.setVisible(True)
         inspector.show()
     self.setWindowIcon(QIcon("python.png"))  
Пример #25
0
 def toggle_inspector(self):
     """Toggle the web inspector."""
     cur = self._current_widget()
     if cur.inspector is None:
         if not config.get('general', 'developer-extras'):
             raise cmdexc.CommandError(
                 "Please enable developer-extras before using the "
                 "webinspector!")
         cur.inspector = QWebInspector()
         cur.inspector.setPage(cur.page())
         cur.inspector.show()
     elif cur.inspector.isVisible():
         cur.inspector.hide()
     else:
         if not config.get('general', 'developer-extras'):
             raise cmdexc.CommandError(
                 "Please enable developer-extras before using the "
                 "webinspector!")
         else:
             cur.inspector.show()
Пример #26
0
    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)
Пример #27
0
class WebInspector(QWidget):
    """WebInspector widget class"""

    def __init__(self, parent):
        super(WebInspector, self).__init__(parent)
        vbox = QVBoxLayout(self)
        self._webInspector = QWebInspector(self)
        vbox.addWidget(self._webInspector)
        self.btnDock = QPushButton(translations.TR_UNDOCK)
        vbox.addWidget(self.btnDock)

        ExplorerContainer.register_tab(translations.TR_TAB_WEB_INSPECTOR, self)
        IDE.register_service('web_inspector', self)

    def refresh_inspector(self):
        """Refresh WebInspector widget by hiding and showing"""
        self._webInspector.hide()
        self._webInspector.show()

    def set_inspection_page(self, page):
        """Method to load an argument page object on the WebInspector"""
        self._webInspector.setPage(page)
        self._webInspector.setVisible(True)
Пример #28
0
class WebPage(QWebPage):
    def __init__(self):
        super(WebPage, self).__init__()
        self.inspector = QWebInspector()
        self.inspector.setPage(self)
        self.inspector.resize(1024, 400)
        diskCache = QNetworkDiskCache(self)
        diskCache.setCacheDirectory(assets.fs.dataPath() + '/Cache')
        self.networkAccessManager().setCache(diskCache)
        self.networkAccessManager().setCookieJar(assets.dataJar)

    def javaScriptConsoleMessage(self, messgae, lineNumber, sourceId):
        if assets.manifest['debug']:
            print("==>[console]: %s @%s: %s" % (sourceId, lineNumber, messgae))

    def userAgentForUrl(self, url):
        return "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36"

    def acceptNavigationRequest(self, frame, request, type):
        if(type == QWebPage.NavigationTypeLinkClicked):
            url = request.url().toString()
            if(frame == self.mainFrame()):
                    self.view().load(url)
                    return False
            elif frame == None:
                    # self.createWindow(QWebPage.WebBrowserWindow, url)
                    webbrowser.open(request.url().toString())
                    return False
        return QWebPage.acceptNavigationRequest(self, frame, request, type)

    # def downloadRequested(self, request):
    #         print(request)

    def findText(self, text):
        return super(WebPage, self).findText(text, QWebPage.FindBackward)

    def showInspector(self):
        self.inspector.show()
        self.inspector.activateWindow()

    def hideInspector(self):
        self.inspector.close()

    def createWindow(self, type, url = None):
        from dae.window import Window
        window = Window(self.view().parentWidget(), url, isDialog = (type == QWebPage.WebModalDialog))
        return window.webView.page()

    def javaScriptAlert(self, frame, msg):
        QMessageBox.information(self.view().parentWidget(), None, msg)

    def javaScriptConfirm(self, frame, msg):
        return QMessageBox.question(self.view().parentWidget(), None, msg) == QMessageBox.Yes

    # There is a bug in PyQt
    # def javaScriptPrompt(self, frame, msg, defaultValue):
    #         result = QInputDialog.getText(self.view().parentWidget(), None, msg)
    #         return (result[1], result[0])

    def close(self):
        self.hideInspector()
        assets.dataJar.save()
Пример #29
0
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))
        self._page = WebPage(self)
        self.setPage(self._page)
        self.inspector.setPage(self._page)
        self.clear()
        self.setAcceptDrops(False)

    def sizeHint(self):
        return self._size_hint

    def refresh(self):
        self.pageAction(self.page().Reload).trigger()

    @property
    def scroll_pos(self):
        mf = self.page().mainFrame()
        return (mf.scrollBarValue(Qt.Horizontal),
                mf.scrollBarValue(Qt.Vertical))

    @scroll_pos.setter
    def scroll_pos(self, val):
        mf = self.page().mainFrame()
        mf.setScrollBarValue(Qt.Horizontal, val[0])
        mf.setScrollBarValue(Qt.Vertical, val[1])

    def clear(self):
        self.setHtml(
            _('''
            <h3>Live preview</h3>

            <p>Here you will see a live preview of the HTML file you are currently editing.
            The preview will update automatically as you make changes.

            <p style="font-size:x-small; color: gray">Note that this is a quick preview
            only, it is not intended to simulate an actual e-book reader. Some
            aspects of your e-book will not work, such as page breaks and page margins.
            '''))

    def inspect(self):
        self.inspector.parent().show()
        self.inspector.parent().raise_()
        self.pageAction(self.page().InspectElement).trigger()

    def contextMenuEvent(self, ev):
        menu = QMenu(self)
        p = self.page()
        mf = p.mainFrame()
        r = mf.hitTestContent(ev.pos())
        url = unicode_type(r.linkUrl().toString(NO_URL_FORMATTING)).strip()
        ca = self.pageAction(QWebPage.Copy)
        if ca.isEnabled():
            menu.addAction(ca)
        menu.addAction(actions['reload-preview'])
        menu.addAction(QIcon(I('debug.png')), _('Inspect element'),
                       self.inspect)
        if url.partition(':')[0].lower() in {'http', 'https'}:
            menu.addAction(_('Open link'), partial(open_url, r.linkUrl()))
        menu.exec_(ev.globalPos())
Пример #30
0
 def __init__(self, parent=None):
     super().__init__(parent)
     qwebinspector = QWebInspector()
     self._set_widget(qwebinspector)
Пример #31
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.setStyleSheet("background-color:#a7a7a7;font-size: 12px;")

        MainWindow.setMaximumHeight(16777215)
        MainWindow.setMaximumWidth(16777215)

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

        self.toolbar = QToolBar()
        self.toolbar.setObjectName(_fromUtf8("toolbar"))
        self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))

        #Timer for label resets.
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.reset)
        self.timer.start(9000)  #Update within every 9 seconds.

        #Back.
        self.back = QToolButton()
        self.back.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon = QIcon()
        icon.addPixmap(QPixmap(_fromUtf8(":/icons/back.png")), QIcon.Normal,
                       QIcon.Off)
        self.back.setIcon(icon)
        self.back.setObjectName(_fromUtf8("back"))
        self.back.setToolTip('Go Back')
        self.back.clicked.connect(self.backs)
        self.back.setFixedSize(24, 24)
        self.toolbar.addWidget(self.back)

        #Address.
        self.address = QLineEdit()
        self.address.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.address.setObjectName(_fromUtf8("lineEdit"))
        self.address.setPlaceholderText("Type an address")
        self.address.returnPressed.connect(self.system_arguments)
        self.toolbar.addWidget(self.address)

        #Forward.
        self.forward = QToolButton()
        self.forward.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon1 = QIcon()
        icon1.addPixmap(QPixmap(_fromUtf8(":/icons/forward.png")),
                        QIcon.Normal, QIcon.Off)
        self.forward.setIcon(icon1)
        self.forward.setObjectName(_fromUtf8("forward"))
        self.forward.setToolTip('Go Forward')
        self.forward.clicked.connect(self.forwards)
        self.forward.setFixedSize(24, 24)
        self.toolbar.addWidget(self.forward)

        #Home.
        self.home = QToolButton()
        self.home.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon2 = QIcon()
        icon2.addPixmap(QPixmap(_fromUtf8(":/icons/home.png")), QIcon.Normal,
                        QIcon.Off)
        self.home.setIcon(icon2)
        self.home.setObjectName(_fromUtf8("home"))
        self.home.setToolTip('Go Home')
        self.home.clicked.connect(self.homes)
        self.home.setFixedSize(24, 24)
        self.toolbar.addWidget(self.home)

        #Reload.
        self.reloading = QToolButton()
        self.reloading.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon3 = QIcon()
        icon3.addPixmap(QPixmap(_fromUtf8(":/icons/reload.png")), QIcon.Normal,
                        QIcon.Off)
        self.reloading.setIcon(icon3)
        self.reloading.setObjectName(_fromUtf8("reload"))
        self.reloading.setToolTip('Reload Page')
        self.reloading.clicked.connect(self.reloads)
        self.reloading.setFixedSize(24, 24)
        self.toolbar.addWidget(self.reloading)

        #Html5 player.
        self.vlc = QToolButton()
        self.vlc.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon4 = QIcon()
        icon4.addPixmap(QPixmap(_fromUtf8(":/icons/vlc_play.png")),
                        QIcon.Normal, QIcon.Off)
        self.vlc.setIcon(icon4)
        self.vlc.setObjectName(_fromUtf8("vlc"))
        self.vlc.setToolTip('Open HTML5 player')
        self.vlc.clicked.connect(self.html5)
        self.vlc.setFixedSize(24, 24)
        self.toolbar.addWidget(self.vlc)

        #Bookmark.
        self.bookmark = QToolButton()
        self.bookmark.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon5 = QIcon()
        icon5.addPixmap(QPixmap(_fromUtf8(":/icons/bookmark.png")),
                        QIcon.Normal, QIcon.Off)
        self.bookmark.setIcon(icon5)
        self.bookmark.setObjectName(_fromUtf8("bookmark"))
        self.bookmark.setToolTip('Bookmark addressbar location')
        self.bookmark.clicked.connect(self.bookmarks)
        self.bookmark.clicked.connect(self.notice_new_bookmark)
        self.bookmark.setFixedSize(24, 24)
        self.toolbar.addWidget(self.bookmark)

        #Open Bookmarks.
        self.see_bookmark = QToolButton()
        self.see_bookmark.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon6 = QIcon()
        icon6.addPixmap(QPixmap(_fromUtf8(":/icons/seebook.png")),
                        QIcon.Normal, QIcon.Off)
        self.see_bookmark.setIcon(icon6)
        self.see_bookmark.setObjectName(_fromUtf8("see_bookmark"))
        self.see_bookmark.setToolTip('See Bookmarks')
        self.see_bookmark.clicked.connect(self.bookopen)
        self.see_bookmark.setFixedSize(24, 24)
        self.toolbar.addWidget(self.see_bookmark)

        #Download.
        self.download = QToolButton()
        self.download.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon7 = QIcon()
        icon7.addPixmap(QPixmap(_fromUtf8(":/icons/download.png")),
                        QIcon.Normal, QIcon.Off)
        self.download.setIcon(icon7)
        self.download.setObjectName(_fromUtf8("download"))
        self.download.setToolTip('Download file from location')
        self.download.clicked.connect(self.downloads)
        self.download.clicked.connect(self.loadings)
        self.download.setFixedSize(24, 24)
        self.toolbar.addWidget(self.download)

        #Search Switch.
        self.switch_2 = QLineEdit()
        self.switch_2.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.switch_2.setObjectName(_fromUtf8("switch_2"))
        self.switch_2.setPlaceholderText("Switch")
        self.switch_2.setFixedSize(50, 24)
        self.switch_2.setToolTip(
            'gs=Startpage, wiki = Wikipedia,  tube = Youtube,  wolf = Wolfram Alpha. Empty = Startpage search (default)'
        )
        self.switch_2.returnPressed.connect(self.extra)
        self.toolbar.addWidget(self.switch_2)

        #Search.
        self.Search = QLineEdit()
        self.Search.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.Search.setObjectName(_fromUtf8("Search"))
        self.Search.setPlaceholderText("Search something")
        self.Search.setToolTip('Search')
        self.Search.returnPressed.connect(self.extra)
        self.toolbar.addWidget(self.Search)

        #Printing.
        self.printing = QToolButton()
        self.printing.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon8 = QIcon()
        icon8.addPixmap(QPixmap(_fromUtf8(":/icons/print.png")), QIcon.Normal,
                        QIcon.Off)
        self.printing.setIcon(icon8)
        self.printing.setObjectName(_fromUtf8("print"))
        self.printing.setToolTip('Print')
        self.printing.clicked.connect(self.handlePreview)
        self.printing.clicked.connect(self.printme)
        self.printing.setFixedSize(24, 24)
        self.toolbar.addWidget(self.printing)

        #Zoom +.
        self.zoom_in = QToolButton()
        self.zoom_in.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon9 = QIcon()
        icon9.addPixmap(QPixmap(_fromUtf8(":/icons/zoom-in.png")),
                        QIcon.Normal, QIcon.Off)
        self.zoom_in.setIcon(icon9)
        self.zoom_in.setObjectName(_fromUtf8("zoom_in"))
        self.zoom_in.setToolTip('Zoom +')
        self.zoom_in.clicked.connect(self.zoomins)
        self.zoom_in.setFixedSize(24, 24)
        self.toolbar.addWidget(self.zoom_in)

        #Zoom -.
        self.zoom_out = QToolButton()
        self.zoom_out.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon10 = QIcon()
        icon10.addPixmap(QPixmap(_fromUtf8(":/icons/zoom-out.png")),
                         QIcon.Normal, QIcon.Off)
        self.zoom_out.setIcon(icon10)
        self.zoom_out.setObjectName(_fromUtf8("zoom_out"))
        self.zoom_out.setToolTip('Zoom -')
        self.zoom_out.clicked.connect(self.zoomouts)
        self.zoom_out.setFixedSize(24, 24)
        self.toolbar.addWidget(self.zoom_out)

        #About.
        self.about1 = QPushButton()
        self.about1.setObjectName("Info")
        self.about1.setStyleSheet(
            "QPushButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QPushButton:hover{background-color:#5c5c5c;}")
        self.about1.setText("i")
        self.about1.setToolTip('Info')
        self.about1.setFixedSize(24, 24)
        self.about1.clicked.connect(self.about)
        self.toolbar.addWidget(self.about1)

        #Web browser.
        self.web = NewWindow(self.centralwidget)
        self.web.titleChanged = self.setWindowTitle
        self.web.urlChanged.connect(
            lambda x: self.address.setText(x.toString()))
        self.web.loadStarted.connect(self.begin)
        self.web.loadFinished.connect(self.complete)

        #Label as a secondary address placeholder.
        self.label = QLabel()
        self.label.setFixedSize(500, 16)
        self.label.setText(
            "Click addressbar and press enter if you supplied arguments.")
        self.web.setObjectName(_fromUtf8("kwebview"))
        self.web.setMaximumHeight(16777215)
        self.web.setMaximumWidth(16777215)

        #Adding to layout.
        MainWindow.setCentralWidget(self.centralwidget)
        self.verticalLayout_2.addWidget(self.toolbar)
        self.verticalLayout_2.addWidget(self.web)
        self.verticalLayout_2.addWidget(self.label)

        #Web inspector.
        self.inspector = QWebInspector()

        self.web.page().settings().setAttribute(
            QWebSettings.DeveloperExtrasEnabled, True)
        self.inspector.setPage(self.web.page())

        #More Browser settings.
        self.web.page().settings().setAttribute(QWebSettings.JavascriptEnabled,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalContentCanAccessFileUrls, True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalContentCanAccessRemoteUrls, True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalStorageEnabled, True)
        self.web.page().settings().setAttribute(QWebSettings.PluginsEnabled,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.PrivateBrowsingEnabled, False)
        self.web.page().settings().setAttribute(
            QWebSettings.SpatialNavigationEnabled, True)
        self.web.page().settings().setAttribute(QWebSettings.AutoLoadImages,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.AcceleratedCompositingEnabled, True)
        ####################################################
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
Пример #32
0
class Ui_MainWindow(QMainWindow):
    #Notice that this is the parent window.
    def __init__(self, *args, **kwargs):
        super(Ui_MainWindow, self).__init__(*args, **kwargs)

#Begin page loading

    def begin(self):
        self.label.setText(label.begin())

    def complete(self):
        self.label.setText(label.complete())

#####Download functions.

    def downloads(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self.web,
                                                  "Save as",
                                                  "",
                                                  "All Files (*)",
                                                  options=options)
        address = self.address.text()
        if fileName:
            subprocess.Popen(['wget', address, '-O', fileName])

#Set the label text.

    def loadings(self):
        self.label.setText(label.loadings())
####################################################
#####Printer functions.

    def handlePreview(self):
        dialog = QPrintPreviewDialog()
        dialog.paintRequested.connect(self.handlePaintRequest)
        dialog.exec_()

    def handlePaintRequest(self, printer):
        self.web.render(QPainter(printer))

#Set the label text.

    def printme(self):
        self.label.setText(label.printer())
####################################################
#Open html5 playback.

    def html5(self):
        subprocess.Popen(['python', '/usr/share/html5.py'])
        self.label.setText(label.html5())
####################################################
#####Page navigation functions.

#Back function.

    def backs(self, url):
        goback = self.web.back()

#Forward function.

    def forwards(self, url):
        self.web.forward()

#Reload function.

    def reloads(self):
        self.web.reload()

#System arguments support / Go to address / Find text functionality.

    def system_arguments(self):
        if len(sys.argv) == 1:
            url = self.address.text()
            if url.startswith('http://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

            elif url.startswith('https://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

            elif url.startswith('find:'):
                load = self.address.text()
                self.result0 = load.replace('find:', '')
                print "Finding:" + self.result0
                self.web.findText(self.result0)
                self.label.setText(label.finding())
                del sys.argv[1:]

            else:
                add = "https://" + url
                change = str(add)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

        else:
            self.location = sys.argv[1:]
            self.temp = str(self.location)
            self.result0 = self.temp.replace('[', '')
            self.result1 = self.result0.replace(']', '')
            self.result_final = self.result1.replace("'", '')

            url = self.result_final
            if url.startswith('http://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.loading1 = self.web.load(QUrl(load))
                del sys.argv[1:]

            elif url.startswith('https://'):
                change = str(url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.loading1 = self.web.load(QUrl(load))
                del sys.argv[1:]

            else:
                change = str("https://" + url)
                self.address.setText(change)
                load = self.address.text()
                self.label.setText(load)
                self.web.load(QUrl(load))
                del sys.argv[1:]

#Home page function.

    def homes(self):
        self.home = "http://www.techtimejourney.net/postx_pages/postx.html"
        self.address.setText(self.home)
        self.web.load(QUrl(self.home))
####################################################
#####Page Zoom functions.

    def zoomins(self):
        self.web.setZoomFactor(self.web.zoomFactor() + .2)

    def zoomouts(self):
        self.web.setZoomFactor(self.web.zoomFactor() - .2)

##################################
#####Search engines & default (Now. Startpage).

    def extra(self):
        search = self.Search.text()
        text = self.switch_2.text()
        if text == ('wolf'):

            #Wolfram Alpha search.
            adds1 = "https://www.wolframalpha.com/input/?i=" + search
            self.web.load(QUrl(adds1))
            print adds1

        elif text == ('wiki'):

            #Wikipedia search (english).
            adds1 = "https://en.wikipedia.org/w/index.php?title=Special:Search&profile=default&fulltext=Search&search=" + search
            self.web.load(QUrl(adds1))
            print adds1

        elif text == ('tube'):

            #Youtube search (english).
            adds1 = "https://www.youtube.com/results?search_query=" + search
            self.web.load(QUrl(adds1))
            print adds1

        elif text == ('gs'):

            #Startpage search (english).
            adds1 = "https://startpage.com/do/search?query=" + search
            self.web.load(QUrl(adds1))
            print adds1

        else:
            adds1 = "https://startpage.com/do/search?query=" + search
            self.web.load(QUrl(adds1))
            print adds1

############################################
#####Bookmark functions.

    def bookmarks(self, widget):
        home = os.getenv("HOME")
        print home
        site = str(self.address.text())
        os.chdir(home)
        f = open('.bookmarks.html', 'a')
        f.write("<br>" + "<a href=" + site + ">" + site + "</a>")
        f.close()

#Set label text.

    def notice_new_bookmark(self):
        self.label.setText(label.bookmarked())

#Open bookmarks file.

    def bookopen(self, widget):
        home = os.getenv("HOME")
        print home
        home = os.getenv("HOME")
        os.chdir(home)
        head = "file:///"
        books = ".bookmarks.html"
        adds = self.address.setText(head + home + '/' + books)
        adda = self.address.text()
        self.web.load(QUrl(adda))
####################################################
#####Other functions.
#Label reset.

    def reset(self):
        self.label.setText('')

#About messagebox.

    def about(self):
        buttonReply = QMessageBox.question(
            self,
            "RunIT-QT Browser Copyright (c) 2015 JJ Posti <techtimejourney.net>",
            "RunIT-QT  comes with ABSOLUTELY NO WARRANTY;  This is free software, and you are welcome to redistribute it under  GPL Version 2, June 1991 This is the 0.6.3 version(March 2018). ___________________________________________________________________________ \n \nArgument support (since 0.6).\nStart browser like this: runit 'gooogle.fi' and follow statusbar instructions. ___________________________________________________________________________\n \nFind text from html(since 0.6).\nWrite find:something to address field and press enter to find the first entry. Press enter again to find the second entry etc. ___________________________________________________________________________\n \nRight-click menu:Save image functionality(since 0.6). Right-click upon an image and choose Copy Image address. Next choose Save image and the Save as dialog should open.",
            QMessageBox.Ok)
        if buttonReply == QMessageBox.Ok:
            pass
####################################################
#####UI Parts.

    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.setStyleSheet("background-color:#a7a7a7;font-size: 12px;")

        MainWindow.setMaximumHeight(16777215)
        MainWindow.setMaximumWidth(16777215)

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

        self.toolbar = QToolBar()
        self.toolbar.setObjectName(_fromUtf8("toolbar"))
        self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))

        #Timer for label resets.
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.reset)
        self.timer.start(9000)  #Update within every 9 seconds.

        #Back.
        self.back = QToolButton()
        self.back.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon = QIcon()
        icon.addPixmap(QPixmap(_fromUtf8(":/icons/back.png")), QIcon.Normal,
                       QIcon.Off)
        self.back.setIcon(icon)
        self.back.setObjectName(_fromUtf8("back"))
        self.back.setToolTip('Go Back')
        self.back.clicked.connect(self.backs)
        self.back.setFixedSize(24, 24)
        self.toolbar.addWidget(self.back)

        #Address.
        self.address = QLineEdit()
        self.address.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.address.setObjectName(_fromUtf8("lineEdit"))
        self.address.setPlaceholderText("Type an address")
        self.address.returnPressed.connect(self.system_arguments)
        self.toolbar.addWidget(self.address)

        #Forward.
        self.forward = QToolButton()
        self.forward.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon1 = QIcon()
        icon1.addPixmap(QPixmap(_fromUtf8(":/icons/forward.png")),
                        QIcon.Normal, QIcon.Off)
        self.forward.setIcon(icon1)
        self.forward.setObjectName(_fromUtf8("forward"))
        self.forward.setToolTip('Go Forward')
        self.forward.clicked.connect(self.forwards)
        self.forward.setFixedSize(24, 24)
        self.toolbar.addWidget(self.forward)

        #Home.
        self.home = QToolButton()
        self.home.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon2 = QIcon()
        icon2.addPixmap(QPixmap(_fromUtf8(":/icons/home.png")), QIcon.Normal,
                        QIcon.Off)
        self.home.setIcon(icon2)
        self.home.setObjectName(_fromUtf8("home"))
        self.home.setToolTip('Go Home')
        self.home.clicked.connect(self.homes)
        self.home.setFixedSize(24, 24)
        self.toolbar.addWidget(self.home)

        #Reload.
        self.reloading = QToolButton()
        self.reloading.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon3 = QIcon()
        icon3.addPixmap(QPixmap(_fromUtf8(":/icons/reload.png")), QIcon.Normal,
                        QIcon.Off)
        self.reloading.setIcon(icon3)
        self.reloading.setObjectName(_fromUtf8("reload"))
        self.reloading.setToolTip('Reload Page')
        self.reloading.clicked.connect(self.reloads)
        self.reloading.setFixedSize(24, 24)
        self.toolbar.addWidget(self.reloading)

        #Html5 player.
        self.vlc = QToolButton()
        self.vlc.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon4 = QIcon()
        icon4.addPixmap(QPixmap(_fromUtf8(":/icons/vlc_play.png")),
                        QIcon.Normal, QIcon.Off)
        self.vlc.setIcon(icon4)
        self.vlc.setObjectName(_fromUtf8("vlc"))
        self.vlc.setToolTip('Open HTML5 player')
        self.vlc.clicked.connect(self.html5)
        self.vlc.setFixedSize(24, 24)
        self.toolbar.addWidget(self.vlc)

        #Bookmark.
        self.bookmark = QToolButton()
        self.bookmark.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon5 = QIcon()
        icon5.addPixmap(QPixmap(_fromUtf8(":/icons/bookmark.png")),
                        QIcon.Normal, QIcon.Off)
        self.bookmark.setIcon(icon5)
        self.bookmark.setObjectName(_fromUtf8("bookmark"))
        self.bookmark.setToolTip('Bookmark addressbar location')
        self.bookmark.clicked.connect(self.bookmarks)
        self.bookmark.clicked.connect(self.notice_new_bookmark)
        self.bookmark.setFixedSize(24, 24)
        self.toolbar.addWidget(self.bookmark)

        #Open Bookmarks.
        self.see_bookmark = QToolButton()
        self.see_bookmark.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon6 = QIcon()
        icon6.addPixmap(QPixmap(_fromUtf8(":/icons/seebook.png")),
                        QIcon.Normal, QIcon.Off)
        self.see_bookmark.setIcon(icon6)
        self.see_bookmark.setObjectName(_fromUtf8("see_bookmark"))
        self.see_bookmark.setToolTip('See Bookmarks')
        self.see_bookmark.clicked.connect(self.bookopen)
        self.see_bookmark.setFixedSize(24, 24)
        self.toolbar.addWidget(self.see_bookmark)

        #Download.
        self.download = QToolButton()
        self.download.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon7 = QIcon()
        icon7.addPixmap(QPixmap(_fromUtf8(":/icons/download.png")),
                        QIcon.Normal, QIcon.Off)
        self.download.setIcon(icon7)
        self.download.setObjectName(_fromUtf8("download"))
        self.download.setToolTip('Download file from location')
        self.download.clicked.connect(self.downloads)
        self.download.clicked.connect(self.loadings)
        self.download.setFixedSize(24, 24)
        self.toolbar.addWidget(self.download)

        #Search Switch.
        self.switch_2 = QLineEdit()
        self.switch_2.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.switch_2.setObjectName(_fromUtf8("switch_2"))
        self.switch_2.setPlaceholderText("Switch")
        self.switch_2.setFixedSize(50, 24)
        self.switch_2.setToolTip(
            'gs=Startpage, wiki = Wikipedia,  tube = Youtube,  wolf = Wolfram Alpha. Empty = Startpage search (default)'
        )
        self.switch_2.returnPressed.connect(self.extra)
        self.toolbar.addWidget(self.switch_2)

        #Search.
        self.Search = QLineEdit()
        self.Search.setStyleSheet(
            "QLineEdit{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QLineEdit:hover{background-color:#5c5c5c;}")
        self.Search.setObjectName(_fromUtf8("Search"))
        self.Search.setPlaceholderText("Search something")
        self.Search.setToolTip('Search')
        self.Search.returnPressed.connect(self.extra)
        self.toolbar.addWidget(self.Search)

        #Printing.
        self.printing = QToolButton()
        self.printing.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon8 = QIcon()
        icon8.addPixmap(QPixmap(_fromUtf8(":/icons/print.png")), QIcon.Normal,
                        QIcon.Off)
        self.printing.setIcon(icon8)
        self.printing.setObjectName(_fromUtf8("print"))
        self.printing.setToolTip('Print')
        self.printing.clicked.connect(self.handlePreview)
        self.printing.clicked.connect(self.printme)
        self.printing.setFixedSize(24, 24)
        self.toolbar.addWidget(self.printing)

        #Zoom +.
        self.zoom_in = QToolButton()
        self.zoom_in.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon9 = QIcon()
        icon9.addPixmap(QPixmap(_fromUtf8(":/icons/zoom-in.png")),
                        QIcon.Normal, QIcon.Off)
        self.zoom_in.setIcon(icon9)
        self.zoom_in.setObjectName(_fromUtf8("zoom_in"))
        self.zoom_in.setToolTip('Zoom +')
        self.zoom_in.clicked.connect(self.zoomins)
        self.zoom_in.setFixedSize(24, 24)
        self.toolbar.addWidget(self.zoom_in)

        #Zoom -.
        self.zoom_out = QToolButton()
        self.zoom_out.setStyleSheet(
            "QToolButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QToolButton:hover{background-color:#5c5c5c;}")
        icon10 = QIcon()
        icon10.addPixmap(QPixmap(_fromUtf8(":/icons/zoom-out.png")),
                         QIcon.Normal, QIcon.Off)
        self.zoom_out.setIcon(icon10)
        self.zoom_out.setObjectName(_fromUtf8("zoom_out"))
        self.zoom_out.setToolTip('Zoom -')
        self.zoom_out.clicked.connect(self.zoomouts)
        self.zoom_out.setFixedSize(24, 24)
        self.toolbar.addWidget(self.zoom_out)

        #About.
        self.about1 = QPushButton()
        self.about1.setObjectName("Info")
        self.about1.setStyleSheet(
            "QPushButton{color:#ffffff; background-color:#353535; border: 2px solid #353535; border-radius: 3px;font-size: 12px;}"
            "QPushButton:hover{background-color:#5c5c5c;}")
        self.about1.setText("i")
        self.about1.setToolTip('Info')
        self.about1.setFixedSize(24, 24)
        self.about1.clicked.connect(self.about)
        self.toolbar.addWidget(self.about1)

        #Web browser.
        self.web = NewWindow(self.centralwidget)
        self.web.titleChanged = self.setWindowTitle
        self.web.urlChanged.connect(
            lambda x: self.address.setText(x.toString()))
        self.web.loadStarted.connect(self.begin)
        self.web.loadFinished.connect(self.complete)

        #Label as a secondary address placeholder.
        self.label = QLabel()
        self.label.setFixedSize(500, 16)
        self.label.setText(
            "Click addressbar and press enter if you supplied arguments.")
        self.web.setObjectName(_fromUtf8("kwebview"))
        self.web.setMaximumHeight(16777215)
        self.web.setMaximumWidth(16777215)

        #Adding to layout.
        MainWindow.setCentralWidget(self.centralwidget)
        self.verticalLayout_2.addWidget(self.toolbar)
        self.verticalLayout_2.addWidget(self.web)
        self.verticalLayout_2.addWidget(self.label)

        #Web inspector.
        self.inspector = QWebInspector()

        self.web.page().settings().setAttribute(
            QWebSettings.DeveloperExtrasEnabled, True)
        self.inspector.setPage(self.web.page())

        #More Browser settings.
        self.web.page().settings().setAttribute(QWebSettings.JavascriptEnabled,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalContentCanAccessFileUrls, True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalContentCanAccessRemoteUrls, True)
        self.web.page().settings().setAttribute(
            QWebSettings.LocalStorageEnabled, True)
        self.web.page().settings().setAttribute(QWebSettings.PluginsEnabled,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.PrivateBrowsingEnabled, False)
        self.web.page().settings().setAttribute(
            QWebSettings.SpatialNavigationEnabled, True)
        self.web.page().settings().setAttribute(QWebSettings.AutoLoadImages,
                                                True)
        self.web.page().settings().setAttribute(
            QWebSettings.AcceleratedCompositingEnabled, True)
        ####################################################
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "RunIT-QT", None))
        self.back.setText(_translate("MainWindow", "Back", None))
        self.forward.setText(_translate("MainWindow", "Forward\n" "", None))
        self.home.setText(_translate("MainWindow", "Home", None))
        self.reloading.setText(_translate("MainWindow", "Reload\n" "", None))
        self.vlc.setText(_translate("MainWindow", "Vlc Play", None))
        self.bookmark.setText(_translate("MainWindow", "Bookmarkl", None))
        self.see_bookmark.setText(
            _translate("MainWindow", "See bookmarks", None))
        self.download.setText(_translate("MainWindow", "Download", None))
        self.printing.setText(_translate("MainWindow", "Print", None))
        self.zoom_in.setText(_translate("MainWindow", "Zoom+", None))
        self.zoom_out.setText(_translate("MainWindow", "Zoom-", None))
Пример #33
0
class WebViewPlus(QWebView):
    """
    WebView 커스터마이징
     - inspector 추가
     - jsconsole 로그 추가
     - webview에서 document로 이벤트를 발생함.
    """

    customEvent = """
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent("{type}", true, true, {detail} );
    document.dispatchEvent(event);
    """

    def __init__(self):
        super().__init__()
        self.setPage(WebPagePlus())
        self._setupWebview()

    def _setupWebview(self):
        settings = self.settings()
        currentPath = QDir.currentPath()
        settings.setAttribute(QWebSettings.LocalStorageEnabled, True)
        settings.setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True)
        settings.setAttribute(QWebSettings.OfflineWebApplicationCacheEnabled,
                              True)
        settings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        settings.setAttribute(QWebSettings.CSSGridLayoutEnabled, True)
        settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanCloseWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
        settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        settings.setOfflineStoragePath(currentPath + "/storage/offline")
        settings.setOfflineWebApplicationCachePath(currentPath +
                                                   "/storage/webcache")
        settings.setLocalStoragePath(currentPath + "/storage/local")
        settings.setOfflineStorageDefaultQuota(5 * 1024 * 1024)
        settings.setOfflineWebApplicationCacheQuota(5 * 1024 * 1024)
        settings.enablePersistentStorage()
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F4'] = QShortcut(self)
        shortcut['F4'].setContext(Qt.ApplicationShortcut)
        shortcut['F4'].setKey(Qt.Key_F4)
        shortcut['F4'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)

    def _toggleInspector(self):
        """
        F4키를 다시 누르면 "개발자 도구"가 토글됨.
        """
        self.devTool.setVisible(not self.devTool.isVisible())

    # webview의 document에 이벤트를 발생함.
    def fireEvent(self, type, detail):
        self.page().mainFrame().evaluateJavaScript(
            WebViewPlus.customEvent.format(type=type, detail=detail))
Пример #34
0
class Window(QWidget):

    session = dict()

    def __init__(self, config):
        super(Window, self).__init__()

        self.config = config

        self.base_uri = QUrl.fromLocalFile(
            os.path.dirname(__file__)).toString()

        # initial web view add handle all link and form submitted
        self.web_view = QWebView(self)
        self.web_view.setPage(WebPage())
        self.web_view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        self.web_view.page().linkClicked.connect(self.link_clicked)
        #self.web_view.page().urlChanged.connect(self.url_changed)
        self.web_view.page().loadFinished.connect(self.load_finished)
        self.web_view.page().loadStarted.connect(self.load_started)

        self.web_view.page().form_submitted.connect(self.handle_form_submitted)
        self.web_view.page().request_reload.connect(self.handle_reload)

        # initial template lookup
        self.tempalte_lookup = TemplateLookup(
            directories=[self.config.settings.get("mako.directories")],
            module_directory=self.config.settings.get("mako.module_directory"),
            input_encoding='utf-8',
        )

        # layout attribute
        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)

        # add debug inspector
        if self.config.settings.get("debug", False):
            self.setup_inspector()
            self.splitter = QSplitter(self)
            self.splitter.setOrientation(Qt.Vertical)
            layout.addWidget(self.splitter)
            self.splitter.addWidget(self.web_view)
            self.splitter.addWidget(self.web_inspector)

        else:
            layout.addWidget(self.web_view)

    def setup_inspector(self):
        '''
            This code from http://agateau.com/2012/02/03/pyqtwebkit-experiments-part-2-debugging/
        '''
        page = self.web_view.page()
        page.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.web_inspector = QWebInspector(self)
        self.web_inspector.setPage(page)

        shortcut = QShortcut(self)
        shortcut.setKey(Qt.Key_F12)
        shortcut.activated.connect(self.toggle_inspector)
        self.web_inspector.setVisible(False)

    def toggle_inspector(self):
        self.web_inspector.setVisible(not self.web_inspector.isVisible())

    def handle_form_submitted(self, qurl, elements=dict()):

        #       print("\n\ngot url: ", qurl)
        qqurl = QUrlQuery(qurl)
        for key, value in qqurl.queryItems():
            elements[key] = value

        self.render(qurl.path(), elements)
        # do stuff with elements...
#        for item in elements.items():
#            print ("got: ", item)

    def handle_reload(self, qurl):
        self.render(qurl.path())

    def load_started(self):
        ''''''
        # print("load_started ->: ", self.web_view.url())

    def load_finished(self, finished):
        ''''''
        # print("load_finished ->: ", finished)
#        if finished:
#            self.web_view.setUrl(QUrl('/login'))

#     def url_changed(self, qurl):
#         ''''''
# print("url_changed ->: ", qurl)

    def link_clicked(self, qurl):
        # print("link_clicked ->: ", qurl)
        qqurl = QUrlQuery(qurl)
        elements = {}
        # print("got link_clicked url: ", qurl)
        for key, value in qqurl.queryItems():
            elements[key] = value

        self.render(qurl.path(), elements)
        #self.render(qurl.path())

    def render(self, url, args=None):
        self.config.current_route_path = url
        print("current_route_path: ", self.config.current_route_path)
        logger.debug("url: %s" % url)
        route = self.config.get_route(url)
        logger.debug("view: %s" % route)

        if route is not None:
            view = route.get('view')
            context_obj = context.ResourceContext(self.config, self.session)
            context_obj.add_args(args)
            try:
                response = view(context_obj)
            except Exception as e:
                if e.args[0] == 'Request Exit':
                    self.close()
                    return

                logger.exception(e)
                #need error page
                return self.link_clicked('/home')

            if not isinstance(response, dict):
                if isinstance(response, QUrl):
                    return self.link_clicked(response)
#                    url = response.path()
#                    print('window url', url)
#                    return self.render(url)
#                else:
#                    # need error page
#                    return self.render('/login')

            logger.debug("response: %s" % response)

            template = self.tempalte_lookup.get_template(
                self.config.get_route(url).get('renderer'))

            response['request'] = context_obj
            response['base_uri'] = self.base_uri
            html = template.render(**response)

            self.web_view.setHtml(html, QUrl("file://" + url))
            # self.web_view.setHtml(html)
            #self.web_view.load(a)

    def welcome(self):
        context_obj = context.ResourceContext(self.config, self.session)
        return self.link_clicked(context_obj.redirect_url('login'))
Пример #35
0
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))
        self._page = WebPage(self)
        self.setPage(self._page)
        self.inspector.setPage(self._page)
        self.clear()

    def sizeHint(self):
        return self._size_hint

    def refresh(self):
        self.pageAction(self.page().Reload).trigger()

    @dynamic_property
    def scroll_pos(self):
        def fget(self):
            mf = self.page().mainFrame()
            return (mf.scrollBarValue(Qt.Horizontal), mf.scrollBarValue(Qt.Vertical))
        def fset(self, val):
            mf = self.page().mainFrame()
            mf.setScrollBarValue(Qt.Horizontal, val[0])
            mf.setScrollBarValue(Qt.Vertical, val[1])
        return property(fget=fget, fset=fset)

    def clear(self):
        self.setHtml(_(
            '''
            <h3>Live preview</h3>

            <p>Here you will see a live preview of the HTML file you are currently editing.
            The preview will update automatically as you make changes.

            <p style="font-size:x-small; color: gray">Note that this is a quick preview
            only, it is not intended to simulate an actual ebook reader. Some
            aspects of your ebook will not work, such as, page breaks and
            page margins.

            '''))
        self.page().current_root = None

    def setUrl(self, qurl):
        self.page().current_root = current_container().root
        return QWebView.setUrl(self, qurl)

    def inspect(self):
        self.inspector.parent().show()
        self.inspector.parent().raise_()
        self.pageAction(self.page().InspectElement).trigger()

    def contextMenuEvent(self, ev):
        menu = QMenu(self)
        p = self.page()
        mf = p.mainFrame()
        r = mf.hitTestContent(ev.pos())
        url = unicode(r.linkUrl().toString(QUrl.None)).strip()
        ca = self.pageAction(QWebPage.Copy)
        if ca.isEnabled():
            menu.addAction(ca)
        menu.addAction(actions['reload-preview'])
        menu.addAction(QIcon(I('debug.png')), _('Inspect element'), self.inspect)
        if url.partition(':')[0].lower() in {'http', 'https'}:
            menu.addAction(_('Open link'), partial(open_url, r.linkUrl()))
        menu.exec_(ev.globalPos())
Пример #36
0
def main():
    global lockfile, procname

    parser = argparse.ArgumentParser()
    parser.add_argument('-W',
                        '--width',
                        dest='width',
                        type=int,
                        default=500,
                        help='Browser window width')
    parser.add_argument('-H',
                        '--height',
                        dest='height',
                        type=int,
                        default=300,
                        help='Browser window height')
    parser.add_argument('-x',
                        '--positionx',
                        dest='posx',
                        type=int,
                        default=1,
                        help='Window position (X)')
    parser.add_argument('-y',
                        '--positiony',
                        dest='posy',
                        type=int,
                        default=1,
                        help='Window position (Y)')
    parser.add_argument('-t',
                        '--title',
                        dest='title',
                        type=str,
                        default="Help",
                        help='Window title')
    parser.add_argument('url', type=str, help='URL of the help file')
    parser.add_argument('-s',
                        '--localstorage',
                        dest='localstorage',
                        type=bool,
                        default=False,
                        help='Write local storage to disk')
    parser.add_argument('-p',
                        '--localstoragepath',
                        dest='localstoragepath',
                        type=str,
                        default=DEFAULT_LOCAL_STORAGE_PATH,
                        help='Path to local storage')
    parser.add_argument('-i',
                        '--iconpath',
                        dest='iconpath',
                        type=str,
                        default=DEFAULT_APP_ICON_PATH,
                        help='Path to application icon')
    parser.add_argument('-l',
                        '--lockfile',
                        dest='lockfile',
                        type=str,
                        default='',
                        help='Write lock file containing a PID to this file')
    parser.add_argument('-n',
                        '--procname',
                        dest='procname',
                        type=str,
                        default='',
                        help='Set process name/title')
    parser.add_argument('-dev',
                        '--devmode',
                        dest='devmode',
                        type=bool,
                        default=False,
                        help='Developer mode toggle')

    args = parser.parse_args()

    sc.write_to_stdout("starting")

    app = QApplication(sys.argv)
    app.aboutToQuit.connect(appExiting)

    window = Window()

    window.resize(args.width, args.height)
    window.move(args.posx, args.posy)
    window.setWindowTitle(args.title)
    window.setWindowIcon(QIcon(args.iconpath))

    # Dev-environment debug variables
    if args.devmode:
        from PyQt5.QtWebKitWidgets import QWebInspector
        inspector = QWebInspector()
        window.view.page().settings().setAttribute(
            QWebSettings.DeveloperExtrasEnabled, True)
        inspector.setPage(window.view.page())
        inspector.showMaximized()

    # Enable LocalStorage
    if args.localstorage:
        window.view.page().settings().setLocalStoragePath(
            args.localstoragepath)
        window.view.page().settings().setAttribute(
            QWebSettings.LocalStorageEnabled, True)
        sc.write_to_stdout("localstorage enabled, path: %s" %
                           args.localstoragepath)

    if args.procname != "":
        procname = args.procname
        setproctitle(args.procname)
        sc.write_to_stdout("using process name %s" % args.procname)

    # Write lock file (if lock file path was set)
    lockfile = args.lockfile
    lockfileWrite()

    window.load_url(args.url)
    window.show()
    app.exec_()
Пример #37
0
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_HostWindow()
        self.ui.setupUi(self)

        # ----------------------------------------------------------------------------------------------------
        # Internal stuff

        # Current remote url
        self.fRemoteURL = ""

        # Qt idle timer
        self.fIdleTimerId = 0

        # to be filled with key-value pairs of current settings
        self.fSavedSettings = {}

        # ----------------------------------------------------------------------------------------------------
        # Set up GUI

        self.ui.webview = QWebView(self.ui.swp_webview)
        self.ui.webview.setMinimumWidth(980)
        self.ui.swp_webview.layout().addWidget(self.ui.webview)

        self.ui.webpage = RemoteWebPage(self)
        self.ui.webview.setPage(self.ui.webpage)

        self.ui.webinspector = QWebInspector(None)
        self.ui.webinspector.resize(800, 600)
        self.ui.webinspector.setPage(self.ui.webpage)
        self.ui.webinspector.setVisible(False)

        self.ui.act_backend_start.setEnabled(False)
        self.ui.act_backend_start.setVisible(False)
        self.ui.act_backend_stop.setEnabled(False)
        self.ui.act_backend_stop.setVisible(False)
        self.ui.act_backend_restart.setEnabled(False)
        self.ui.act_backend_restart.setVisible(False)
        self.ui.act_backend_hide_modgui.setEnabled(False)
        self.ui.act_backend_hide_modgui.setVisible(False)
        self.ui.act_backend_hide_cloud.setEnabled(False)
        self.ui.act_backend_hide_cloud.setVisible(False)
        self.ui.menu_Backend.menuAction().setEnabled(False)
        self.ui.menu_Backend.menuAction().setVisible(False)

        self.ui.act_pedalboard_new.setEnabled(False)
        self.ui.act_pedalboard_new.setVisible(False)
        self.ui.act_pedalboard_open.setEnabled(False)
        self.ui.act_pedalboard_open.setVisible(False)
        self.ui.act_pedalboard_save.setEnabled(False)
        self.ui.act_pedalboard_save.setVisible(False)
        self.ui.act_pedalboard_save_as.setEnabled(False)
        self.ui.act_pedalboard_save_as.setVisible(False)
        self.ui.act_pedalboard_share.setEnabled(False)
        self.ui.act_pedalboard_share.setVisible(False)
        self.ui.menu_Pedalboard.menuAction().setEnabled(False)
        self.ui.menu_Pedalboard.menuAction().setVisible(False)

        self.ui.act_presets_new.setEnabled(False)
        self.ui.act_presets_new.setVisible(False)
        self.ui.act_presets_save.setEnabled(False)
        self.ui.act_presets_save.setVisible(False)
        self.ui.act_presets_save_as.setEnabled(False)
        self.ui.act_presets_save_as.setVisible(False)
        self.ui.menu_Presets.menuAction().setEnabled(False)
        self.ui.menu_Presets.menuAction().setVisible(False)

        self.ui.act_settings_configure.setText(self.tr("Configure MOD-Remote"))
        self.ui.b_start.setIcon(QIcon(":/48x48/network-connect.png"))
        self.ui.b_start.setText(self.tr("Connect..."))
        self.ui.b_configure.hide()
        self.ui.label_app.setText("MOD Remote v%s" % config["version"])
        self.ui.label_progress.setText("")

        # disable file menu
        self.ui.act_file_disconnect.setEnabled(False)
        self.ui.act_file_refresh.setEnabled(False)
        self.ui.act_file_inspect.setEnabled(False)

        # Qt needs this so it properly creates & resizes the webview
        self.ui.stackedwidget.setCurrentIndex(1)
        self.ui.stackedwidget.setCurrentIndex(0)

        # ----------------------------------------------------------------------------------------------------
        # Set up GUI (special stuff for Mac OS)

        if MACOS:
            self.ui.act_file_quit.setMenuRole(QAction.QuitRole)
            self.ui.act_settings_configure.setMenuRole(QAction.PreferencesRole)
            self.ui.act_help_about.setMenuRole(QAction.AboutRole)
            #self.ui.menu_Settings.setTitle("Panels")
            #self.ui.menu_Help.hide()

        # ----------------------------------------------------------------------------------------------------
        # Load Settings

        self.loadSettings(True)

        # ----------------------------------------------------------------------------------------------------
        # Connect actions to functions

        self.SIGTERM.connect(self.slot_handleSIGTERM)

        self.ui.act_file_connect.triggered.connect(self.slot_fileConnect)
        self.ui.act_file_disconnect.triggered.connect(self.slot_fileDisconnect)

        self.ui.act_file_refresh.triggered.connect(self.slot_fileRefresh)
        self.ui.act_file_inspect.triggered.connect(self.slot_fileInspect)

        self.ui.act_settings_configure.triggered.connect(self.slot_configure)

        self.ui.act_help_about.triggered.connect(self.slot_about)
        self.ui.act_help_project.triggered.connect(self.slot_showProject)
        self.ui.act_help_website.triggered.connect(self.slot_showWebsite)

        self.ui.b_start.clicked.connect(self.slot_fileConnect)
        self.ui.b_configure.clicked.connect(self.slot_configure)
        self.ui.b_about.clicked.connect(self.slot_about)

        # ----------------------------------------------------------------------------------------------------
        # Final setup

        self.setProperWindowTitle()

        QTimer.singleShot(1, self.fixWebViewSize)
Пример #38
0
class Window(QWidget):

    session = dict()

    def __init__(self, config):
        super(Window, self).__init__()

        self.config = config

        self.base_uri = QUrl.fromLocalFile(os.path.dirname(__file__)).toString()

        # initial web view add handle all link and form submitted
        self.web_view = QWebView(self)
        self.web_view.setPage(WebPage())
        self.web_view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        self.web_view.page().linkClicked.connect(self.link_clicked)
        # self.web_view.page().urlChanged.connect(self.url_changed)
        self.web_view.page().loadFinished.connect(self.load_finished)
        self.web_view.page().loadStarted.connect(self.load_started)

        self.web_view.page().form_submitted.connect(self.handle_form_submitted)
        self.web_view.page().request_reload.connect(self.handle_reload)

        # initial template lookup
        self.tempalte_lookup = TemplateLookup(
            directories=[self.config.settings.get("mako.directories")],
            module_directory=self.config.settings.get("mako.module_directory"),
            input_encoding="utf-8",
        )

        # layout attribute
        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)

        # add debug inspector
        if self.config.settings.get("debug", False):
            self.setup_inspector()
            self.splitter = QSplitter(self)
            self.splitter.setOrientation(Qt.Vertical)
            layout.addWidget(self.splitter)
            self.splitter.addWidget(self.web_view)
            self.splitter.addWidget(self.web_inspector)

        else:
            layout.addWidget(self.web_view)

    def setup_inspector(self):
        """
            This code from http://agateau.com/2012/02/03/pyqtwebkit-experiments-part-2-debugging/
        """
        page = self.web_view.page()
        page.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.web_inspector = QWebInspector(self)
        self.web_inspector.setPage(page)

        shortcut = QShortcut(self)
        shortcut.setKey(Qt.Key_F12)
        shortcut.activated.connect(self.toggle_inspector)
        self.web_inspector.setVisible(False)

    def toggle_inspector(self):
        self.web_inspector.setVisible(not self.web_inspector.isVisible())

    def handle_form_submitted(self, qurl, elements=dict()):

        #       print("\n\ngot url: ", qurl)
        qqurl = QUrlQuery(qurl)
        for key, value in qqurl.queryItems():
            elements[key] = value

        self.render(qurl.path(), elements)
        # do stuff with elements...

    #        for item in elements.items():
    #            print ("got: ", item)

    def handle_reload(self, qurl):
        self.render(qurl.path())

    def load_started(self):
        """"""
        # print("load_started ->: ", self.web_view.url())

    def load_finished(self, finished):
        """"""
        # print("load_finished ->: ", finished)

    #        if finished:
    #            self.web_view.setUrl(QUrl('/login'))

    #     def url_changed(self, qurl):
    #         ''''''
    # print("url_changed ->: ", qurl)

    def link_clicked(self, qurl):
        # print("link_clicked ->: ", qurl)
        qqurl = QUrlQuery(qurl)
        elements = {}
        # print("got link_clicked url: ", qurl)
        for key, value in qqurl.queryItems():
            elements[key] = value

        self.render(qurl.path(), elements)
        # self.render(qurl.path())

    def render(self, url, args=None):
        self.config.current_route_path = url
        print("current_route_path: ", self.config.current_route_path)
        logger.debug("url: %s" % url)
        route = self.config.get_route(url)
        logger.debug("view: %s" % route)

        if route is not None:
            view = route.get("view")
            context_obj = context.ResourceContext(self.config, self.session)
            context_obj.add_args(args)
            try:
                response = view(context_obj)
            except Exception as e:
                if e.args[0] == "Request Exit":
                    self.close()
                    return

                logger.exception(e)
                # need error page
                return self.link_clicked("/home")

            if not isinstance(response, dict):
                if isinstance(response, QUrl):
                    return self.link_clicked(response)
            #                    url = response.path()
            #                    print('window url', url)
            #                    return self.render(url)
            #                else:
            #                    # need error page
            #                    return self.render('/login')

            logger.debug("response: %s" % response)

            template = self.tempalte_lookup.get_template(self.config.get_route(url).get("renderer"))

            response["request"] = context_obj
            response["base_uri"] = self.base_uri
            html = template.render(**response)

            self.web_view.setHtml(html, QUrl("file://" + url))
            # self.web_view.setHtml(html)
            # self.web_view.load(a)

    def welcome(self):
        context_obj = context.ResourceContext(self.config, self.session)
        return self.link_clicked(context_obj.redirect_url("login"))
Пример #39
0
class WebViewPlus(QWebView):
    """
    WebView 커스터마이징
     - inspector 추가
     - jsconsole 로그 추가
     - webview에서 document로 이벤트를 발생함.
    """

    customEvent = """
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent("{type}", true, true, {detail} );
    document.dispatchEvent(event);
    """

    def __init__(self):
        super().__init__()
        self.setPage(WebPagePlus())
        self._setupWebview()

    def _setupWebview(self):
        settings = self.settings()
        currentPath = QDir.currentPath()
        settings.setAttribute(QWebSettings.LocalStorageEnabled, True)
        settings.setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True)
        settings.setAttribute(QWebSettings.OfflineWebApplicationCacheEnabled, True)
        settings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        settings.setAttribute(QWebSettings.CSSGridLayoutEnabled, True)
        settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanCloseWindows, True)
        settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
        settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        settings.setOfflineStoragePath(currentPath + "/storage/offline")
        settings.setOfflineWebApplicationCachePath(currentPath + "/storage/webcache")
        settings.setLocalStoragePath(currentPath + "/storage/local")
        settings.setOfflineStorageDefaultQuota(5 * 1024 * 1024)
        settings.setOfflineWebApplicationCacheQuota(5 * 1024 * 1024)
        settings.enablePersistentStorage()
        
        """
        F12키를 누르면 "개발자 도구"가 노출됨
        """
        # webinspector
        self.webInspector = QWebInspector(self)
        self.webInspector.setPage(self.page())

        #Keyboard shortcuts
        shortcut = {}
        shortcut['F4'] = QShortcut(self)
        shortcut['F4'].setContext(Qt.ApplicationShortcut)
        shortcut['F4'].setKey(Qt.Key_F4)
        shortcut['F4'].activated.connect(self._toggleInspector)
        #F5 - Page reloading
        shortcut['F5'] = QShortcut(self)
        shortcut['F5'].setKey(Qt.Key_F5)
        shortcut['F5'].activated.connect(self.reload)

        # Devtools
        self.webInspector.setVisible(True)
        self.devTool = QDialog(self)
        self.devTool.setWindowTitle("Development Tool")
        self.devTool.resize(950, 400)
        layout = QGridLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.addWidget(self.webInspector)
        self.devTool.setLayout(layout)

    def _toggleInspector(self):
        """
        F4키를 다시 누르면 "개발자 도구"가 토글됨.
        """
        self.devTool.setVisible(not self.devTool.isVisible())

    # webview의 document에 이벤트를 발생함.
    def fireEvent(self, type, detail):
        self.page().mainFrame().evaluateJavaScript(WebViewPlus.customEvent.format(type=type, detail=detail))