示例#1
0
    def __init__(self,
                 name="MyLensApp",
                 width=640,
                 height=480,
                 inspector=False,
                 start_maximized=False,
                 *args,
                 **kwargs):
        super(LensViewQt5, self).__init__(name=name,
                                          width=width,
                                          height=height,
                                          *args,
                                          **kwargs)

        # prepare Qt DBus mainloop
        DBusQtMainLoop(set_as_default=True)
        self._app = QApplication(*args, **kwargs)

        self._app_loaded = False
        self.view = None
        self.page = None
        self.channel = None

        self._manager = ThreadManagerQt5(app=self._app)

        self.start_maximized = start_maximized
        self.inspector = inspector
        self._build_app()
示例#2
0
    def __init__(self, name="MyLensApp", width=640, height=480, inspector=False,
                 start_maximized=False, *args, **kwargs):
        super(LensViewQt5, self).__init__(name=name, width=width, height=height, *args, **kwargs)

        # prepare Qt DBus mainloop
        DBusQtMainLoop(set_as_default=True)
        self._app = QApplication(*args, **kwargs)

        self._app_loaded = False
        self.view = None
        self.page = None
        self.channel = None

        self._manager = ThreadManagerQt5(app=self._app)

        self.start_maximized = start_maximized
        self.inspector = inspector
        self._build_app()
示例#3
0
class LensViewQt5(View):
    def __init__(self,
                 name="MyLensApp",
                 width=640,
                 height=480,
                 inspector=False,
                 start_maximized=False,
                 *args,
                 **kwargs):
        super(LensViewQt5, self).__init__(name=name,
                                          width=width,
                                          height=height,
                                          *args,
                                          **kwargs)

        # prepare Qt DBus mainloop
        DBusQtMainLoop(set_as_default=True)
        self._app = QApplication(*args, **kwargs)

        self._app_loaded = False
        self.view = None
        self.page = None
        self.channel = None

        self._manager = ThreadManagerQt5(app=self._app)

        self.start_maximized = start_maximized
        self.inspector = inspector
        self._build_app()

    def _build_app(self):
        if self.inspector:
            os.environ.update(
                {'QTWEBENGINE_REMOTE_DEBUGGING': '127.0.0.1:23654'})
        # build webkit container
        self.view = QtWebEng.QWebEngineView()
        self.page = LensQWebEnginePage()
        self.channel = QWebChannel(self.page)
        self.window = LensMainWindow(title=self._app_name,
                                     width=self.width,
                                     height=self.height)

        # Subclass must load the first URL to be displayed.
        # Here is an example:
        # self.web_page.load(QUrl('qrc:///static/view_wrap.html'))

        self.view.setContextMenuPolicy(Qt.NoContextMenu)
        self.page.setView(self.view)

        # connect to Qt signals
        self.view.loadFinished.connect(self._loaded_cb)
        self.view.titleChanged.connect(self._title_changed_cb)
        self._app.lastWindowClosed.connect(self._last_window_closed_cb)

        self._cnam = CustomNetworkAccessManager(page=self.page)
        self.page.set_network_access_manager(self._cnam)

        # connect to Lens signals
        self.on('__close_app', self._close_cb)

        # center on screen
        frame_geometry = self.window.frameGeometry()
        active_screen = self._app.desktop().screenNumber(
            self._app.desktop().cursor().pos())

        _center = self.app.desktop().screenGeometry(active_screen).center()
        frame_geometry.moveCenter(_center)
        self.window.move(frame_geometry.topLeft())

        self.window.setCentralWidget(self.view)

        if self.start_maximized:
            self.window.showMaximized()

    def _close_cb(self):
        self.emit('app.close')
        self._app.exit()

    def _last_window_closed_cb(self, *args):
        self.emit('__close_app', *args)

    def _loaded_cb(self, success):
        # show window once some page has loaded
        self._lensview.show()
        if self.start_maximized:
            self.toggle_window_maximize()

        if not self.app_loaded:
            self._app_loaded = True
            self.emit('app.loaded')

    def _title_changed_cb(self, title):
        _in = str(title)

        # check for "_BR::" leader to determine we're crossing
        # the python/JS bridge
        if _in is None or not _in.startswith('_BR::'):
            return

        try:
            _in = json.loads(_in[5:])

            _name = _in.setdefault('name', '')
            _args = _in.setdefault('args', [])

        except:
            return

        # emit our python/js bridge signal
        self.emit(_name, *_args)

    def _run(self):
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self._app.exec_()

    def emit_js(self, name, *args):
        self.view.runJavaScript(
            str(self._javascript % json.dumps([name] + list(args))))

    def load_uri(self, uri):
        uri_base = os.path.dirname(uri) + '/'
        self.set_uri_app_base(uri_base)
        path = uri_base + 'app.html'

        stream = QFile(path)
        if stream.open(QFile.ReadOnly):
            data = str(stream.readAll(), 'utf-8')
            self._lensview.setHtml(data, QUrl('file://' + uri_base))

    def set_inspector(self, state):
        self._lensview.set_inspector(state)

    def set_size(self, width, height):
        self._lensview.setMinimumSize(width, height)
        self._lensview.resize(width, height)

    def set_title(self, title):
        self._lensview.setWindowTitle(str(title))

    def set_uri_app_base(self, uri):
        self._cnam.uri_app_base = uri

    def set_uri_lens_base(self, uri):
        self._cnam.uri_lens_base = uri

    def toggle_window_maximize(self):
        if self.view.windowState() & Qt.WindowMaximized:
            self.view.setWindowState(self._lensview.windowState()
                                     ^ Qt.WindowMaximized)
            self.emit_js('window-unmaximized')
        else:
            self.view.setWindowState(self._lensview.windowState()
                                     | Qt.WindowMaximized)
            self.emit_js('window-maximized')

    def toggle_window_fullscreen(self):
        if self.view.windowState() & Qt.WindowFullScreen:
            self.view.setWindowState(self._lensview.windowState()
                                     ^ Qt.WindowFullScreen)
            self.emit_js('window-unfullscreen')
        else:
            self.view.setWindowState(self._lensview.windowState()
                                     | Qt.WindowFullScreen)
            self.emit_js('window-fullscreen')
示例#4
0
class LensViewQt5(View):
    def __init__(self, name="MyLensApp", width=640, height=480, inspector=False,
                 start_maximized=False, *args, **kwargs):
        super(LensViewQt5, self).__init__(name=name, width=width, height=height, *args, **kwargs)

        # prepare Qt DBus mainloop
        DBusQtMainLoop(set_as_default=True)
        self._app = QApplication(*args, **kwargs)

        self._app_loaded = False
        self.view = None
        self.page = None
        self.channel = None

        self._manager = ThreadManagerQt5(app=self._app)

        self.start_maximized = start_maximized
        self.inspector = inspector
        self._build_app()

    def _build_app(self):
        if self.inspector:
            os.environ.update({'QTWEBENGINE_REMOTE_DEBUGGING': '127.0.0.1:23654'})
        # build webkit container
        self.view = QtWebEng.QWebEngineView()
        self.page = LensQWebEnginePage()
        self.channel = QWebChannel(self.page)
        self.window = LensMainWindow(title=self._app_name, width=self.width, height=self.height)

        # Subclass must load the first URL to be displayed.
        # Here is an example:
        # self.web_page.load(QUrl('qrc:///static/view_wrap.html'))

        self.view.setContextMenuPolicy(Qt.NoContextMenu)
        self.page.setView(self.view)

        # connect to Qt signals
        self.view.loadFinished.connect(self._loaded_cb)
        self.view.titleChanged.connect(self._title_changed_cb)
        self._app.lastWindowClosed.connect(self._last_window_closed_cb)

        self._cnam = CustomNetworkAccessManager(page=self.page)
        self.page.set_network_access_manager(self._cnam)

        # connect to Lens signals
        self.on('__close_app', self._close_cb)

        # center on screen
        frame_geometry = self.window.frameGeometry()
        active_screen = self._app.desktop().screenNumber(self._app.desktop().cursor().pos())

        _center = self.app.desktop().screenGeometry(active_screen).center()
        frame_geometry.moveCenter(_center)
        self.window.move(frame_geometry.topLeft())

        self.window.setCentralWidget(self.view)

        if self.start_maximized:
            self.window.showMaximized()

    def _close_cb(self):
        self.emit('app.close')
        self._app.exit()

    def _last_window_closed_cb(self, *args):
        self.emit('__close_app', *args)

    def _loaded_cb(self, success):
        # show window once some page has loaded
        self._lensview.show()
        if self.start_maximized:
            self.toggle_window_maximize()

        if not self.app_loaded:
            self._app_loaded = True
            self.emit('app.loaded')

    def _title_changed_cb(self, title):
        _in = str(title)

        # check for "_BR::" leader to determine we're crossing
        # the python/JS bridge
        if _in is None or not _in.startswith('_BR::'):
            return

        try:
            _in = json.loads(_in[5:])

            _name = _in.setdefault('name', '')
            _args = _in.setdefault('args', [])

        except:
            return

        # emit our python/js bridge signal
        self.emit(_name, *_args)

    def _run(self):
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self._app.exec_()

    def emit_js(self, name, *args):
        self.view.runJavaScript(str(self._javascript % json.dumps([name] + list(args))))

    def load_uri(self, uri):
        uri_base = os.path.dirname(uri) + '/'
        self.set_uri_app_base(uri_base)
        path = uri_base + 'app.html'

        stream = QFile(path)
        if stream.open(QFile.ReadOnly):
            data = str(stream.readAll(), 'utf-8')
            self._lensview.setHtml(data, QUrl('file://' + uri_base))

    def set_inspector(self, state):
        self._lensview.set_inspector(state)

    def set_size(self, width, height):
        self._lensview.setMinimumSize(width, height)
        self._lensview.resize(width, height)

    def set_title(self, title):
        self._lensview.setWindowTitle(str(title))

    def set_uri_app_base(self, uri):
        self._cnam.uri_app_base = uri

    def set_uri_lens_base(self, uri):
        self._cnam.uri_lens_base = uri

    def toggle_window_maximize(self):
        if self.view.windowState() & Qt.WindowMaximized:
            self.view.setWindowState(self._lensview.windowState() ^ Qt.WindowMaximized)
            self.emit_js('window-unmaximized')
        else:
            self.view.setWindowState(self._lensview.windowState() | Qt.WindowMaximized)
            self.emit_js('window-maximized')

    def toggle_window_fullscreen(self):
        if self.view.windowState() & Qt.WindowFullScreen:
            self.view.setWindowState(self._lensview.windowState() ^ Qt.WindowFullScreen)
            self.emit_js('window-unfullscreen')
        else:
            self.view.setWindowState(self._lensview.windowState() | Qt.WindowFullScreen)
            self.emit_js('window-fullscreen')