Exemplo n.º 1
0
class CoreWWTQtWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):

        super(CoreWWTQtWidget, self).__init__(parent=parent)

        self.web = QWebEngineView()
        self.page = WWTQWebEnginePage()
        self.page.setView(self.web)
        self.web.setPage(self.page)
        self.web.setHtml(WWT_HTML)

        layout = QtWidgets.QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(layout)
        layout.addWidget(self.web)

        self._wwt_ready = False
        self._js_queue = ""

        self.page.wwt_ready.connect(self._on_wwt_ready)

    def send_msg(self, **kwargs):
        msg = json.dumps(kwargs)
        return self._run_js("wwt_apply_json_message(wwt, {0})".format(msg))

    def _on_wwt_ready(self):
        self._run_js(WWT_JSON)
        self._wwt_ready = True
        self._run_js(self._js_queue, async=True)
        self._js_queue = ""

    def _run_js(self, js, async=True):
        if not js:
            return
        if self._wwt_ready:
            logger.debug('Running javascript: %s' % js)
            return self.page.runJavaScript(js, async=async)
        else:
            logger.debug('Caching javascript: %s' % js)
            self._js_queue += js + '\n'
Exemplo n.º 2
0
    def _on_link(self, url):
        su = url.toString(QtCore.QUrl.RemoveQuery)
        if "/spectra/" in su:
            view = QWebEngineView(self.ui)
            wp = QWebEnginePage()
            am = self.view.page().networkAccessManager()
            wp.setNetworkAccessManager(am)
            view.setPage(wp)
            request = self._make_request(url)
            response = am.get(request)

            def resp_finished():
                html = response.readAll()
                matches = re_dl_url.findall(html)
                if matches:
                    self.download(matches[0].decode('ascii'))
                response.deleteLater()

            response.finished.connect(resp_finished)
        else:
            self.view.load(url)
Exemplo n.º 3
0
class WWTQtWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(WWTQtWidget, self).__init__(parent=parent)
        self.web = QWebEngineView()
        self.page = WWTQWebEnginePage()
        self.page.setView(self.web)
        self.web.setPage(self.page)
        self.web.setHtml(WWT_HTML)
        layout = QtWidgets.QVBoxLayout()
        self.setLayout(layout)
        layout.addWidget(self.web)
        self.imagery_layers = get_imagery_layers()
        self.markers = WWTMarkersHelper(self)
        self._wwt_ready = False
        self._js_queue = ""
        self.page.wwt_ready.connect(self._on_wwt_ready)
        self._opacity = 50

    @property
    def foreground_opacity(self):
        return self._opacity

    @foreground_opacity.setter
    def foreground_opacity(self, value):
        if value < 0 or value > 100:
            raise ValueError('opacity should be in the range [0:100]')
        self._opacity = value
        self._update_opacity()

    def _update_opacity(self):
        self.run_js('wwt.setForegroundOpacity({0})'.format(
            self.foreground_opacity))

    @property
    def galactic(self):
        return self._galactic

    @galactic.setter
    def galactic(self, value):
        if not isinstance(value, bool):
            raise TypeError('galactic should be set to a boolean value')
        self.run_js('wwt.settings.set_galacticMode({0});'.format(
            str(value).lower()))

    @property
    def foreground(self):
        return self._foreground

    @foreground.setter
    def foreground(self, value):
        if value not in self.imagery_layers:
            raise ValueError('unknown foreground: {0}'.format(value))
        self.run_js('wwt.setForegroundImageByName("{0}");'.format(value))
        self._update_opacity()

    @property
    def background(self):
        return self._background

    @background.setter
    def background(self, value):
        if value not in self.imagery_layers:
            raise ValueError('unknown background: {0}'.format(value))
        self.run_js('wwt.setBackgroundImageByName("{0}");'.format(value))
        self._update_opacity()

    def _on_wwt_ready(self):
        self._wwt_ready = True
        self.run_js(self._js_queue)
        self._js_queue = ""

    def run_js(self, js):
        if not js:
            return
        if self._wwt_ready:
            logger.debug('Running javascript: %s' % js)
            self.page.runJavaScript(js)
        else:
            logger.debug('Caching javascript: %s' % js)
            self._js_queue += js + '\n'