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'
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)
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'