def make_advanced_dialog(ui, algorithms=None): diag = ExToolWindow(ui) diag.setWindowTitle("Decomposition parameters") vbox = QVBoxLayout() if algorithms: lbl_algo = QLabel(tr("Choose algorithm:")) cbo_algo = QComboBox() cbo_algo.addItems(algorithms) vbox.addWidget(lbl_algo) vbox.addWidget(cbo_algo) else: lbl_comp = QLabel( tr("Enter a comma-separated list of component numbers to use for " "the model:")) txt_comp = QLineEdit() vbox.addWidget(lbl_comp) vbox.addWidget(txt_comp) btns = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal) btns.accepted.connect(diag.accept) btns.rejected.connect(diag.reject) vbox.addWidget(btns) diag.setLayout(vbox) diag.algorithm = lambda: cbo_algo.currentText() diag.components = lambda: [int(s) for s in txt_comp.text().split(',')] return diag
def make_advanced_dialog(ui, algorithms=None): diag = ExToolWindow(ui) diag.setWindowTitle("Decomposition parameters") vbox = QVBoxLayout() if algorithms: lbl_algo = QLabel(tr("Choose algorithm:")) cbo_algo = QComboBox() cbo_algo.addItems(algorithms) vbox.addWidget(lbl_algo) vbox.addWidget(cbo_algo) else: lbl_comp = QLabel(tr( "Enter a comma-separated list of component numbers to use for " "the model:")) txt_comp = QLineEdit() vbox.addWidget(lbl_comp) vbox.addWidget(txt_comp) btns = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal) btns.accepted.connect(diag.accept) btns.rejected.connect(diag.reject) vbox.addWidget(btns) diag.setLayout(vbox) diag.algorithm = lambda: cbo_algo.currentText() diag.components = lambda: [int(s) for s in txt_comp.text().split(',')] return diag
def default(self): if self.window is None: self.window = ExToolWindow(self.ui) self.window.setWindowTitle("EELSDB") vbox = QVBoxLayout() self.window.setLayout(vbox) view = QWebView(self.ui) self.view = view vbox.addWidget(view) self.window.resize(self.view.sizeHint()) # Load spectra browser browse_url = QUrl("https://eelsdb.eu/spectra") self.load_blocking(self.view, browse_url) # Remove header/footer frame = self.view.page().mainFrame() frame.findFirstElement(".footer").removeFromDocument() for el in frame.findAllElements(".navbar"): el.removeFromDocument() self.view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) self.view.linkClicked.connect(self._on_link) self.window.show()
def default(self): if self.window is None: self.window = ExToolWindow(self.ui) self.window.setWindowTitle("EELSDB") vbox = QtWidgets.QVBoxLayout() self.window.setLayout(vbox) view = QWebEngineView(self.ui) self.view = view vbox.addWidget(view) self.window.resize(self.view.sizeHint()) # Load spectra browser browse_url = QtCore.QUrl("https://eelsdb.eu/spectra") self.load_blocking(self.view, browse_url) if not WEBENGINE: self.view.page().setLinkDelegationPolicy( QWebEnginePage.DelegateAllLinks) try: # TODO: downloading spectra is currently broken self.view.linkClicked.connect(self._on_link) except AttributeError: pass self.window.show()
def edit_metadata(self, signal=None): if signal is None: signal = self.ui.get_selected_signal() if signal in self.editors: self.editors[signal].show() else: diag = ExToolWindow(parent=self.ui) sw = self.ui.lut_signalwrapper[signal] diag.setWindowTitle(tr("Metadata of %s") % sw.name) vbox = QVBoxLayout() tw = MetadataTreeWidget(signal) vbox.addWidget(tw) btns = QDialogButtonBox(QDialogButtonBox.Ok) btns.accepted.connect(diag.accept) vbox.addWidget(btns) diag.setLayout(vbox) diag.show() diag.finished.connect(partial(self._on_close, signal)) self.editors[signal] = diag
def edit_metadata(self, signal=None): if signal is None: signal = self.ui.get_selected_signal() if signal in self.editors: self.editors[signal].show() else: diag = ExToolWindow(parent=self.ui) sw = self.ui.lut_signalwrapper[signal] diag.setWindowTitle(tr("Metadata of %s") % sw.name) vbox = QtWidgets.QVBoxLayout() tw = MetadataTreeWidget(signal) vbox.addWidget(tw) btns = QDialogButtonBox(QDialogButtonBox.Ok) btns.accepted.connect(diag.accept) vbox.addWidget(btns) diag.setLayout(vbox) diag.show() diag.finished.connect(partial(self._on_close, signal)) self.editors[signal] = diag
class EELSDBPlugin(Plugin): name = "EELSDB Plugin" def __init__(self, main_window): super(EELSDBPlugin, self).__init__(main_window) self.window = None self.view = None def create_actions(self): self.add_action(self.name + '.browse', "Browse EELSDB", self.default, tip="Browse the EELSDB online database of standard" "EEL spectra") def create_menu(self): self.add_menuitem('EELS', self.ui.actions[self.name + '.browse']) def _make_request(self, url): request = QtNetwork.QNetworkRequest() request.setUrl(QtCore.QUrl(url)) return request def load_blocking(self, view, *args): loop = QtCore.QEventLoop() view.loadFinished.connect(loop.quit) def unravel(): view.loadFinished.disconnect(loop.quit) view.loadFinished.disconnect(unravel) view.loadFinished.connect(unravel) view.load(*args) loop.exec_() 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) def download(self, url): header = { 'Accept': r'text/html,application/xhtml+xml,' 'application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': r'gzip, deflate', 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; WOW64;' ' rv:43.0)Gecko/20100101 Firefox/43.0', } suffix = '.msa' req = urllib.request.Request(url, headers=header) page = urllib.request.urlopen(req) try: f = tempfile.NamedTemporaryFile(delete=False, suffix=suffix) fn = f.name f.write(page.read()) fn = f.name f.close() self.ui.load([fn]) finally: f.close() os.remove(fn) self.record_code("<p>.download(url='%s')" % url) def default(self): if self.window is None: self.window = ExToolWindow(self.ui) self.window.setWindowTitle("EELSDB") vbox = QtWidgets.QVBoxLayout() self.window.setLayout(vbox) view = QWebEngineView(self.ui) self.view = view vbox.addWidget(view) self.window.resize(self.view.sizeHint()) # Load spectra browser browse_url = QtCore.QUrl("https://eelsdb.eu/spectra") self.load_blocking(self.view, browse_url) if not WEBENGINE: self.view.page().setLinkDelegationPolicy( QWebEnginePage.DelegateAllLinks) try: # TODO: downloading spectra is currently broken self.view.linkClicked.connect(self._on_link) except AttributeError: pass self.window.show()
class EELSDBPlugin(Plugin): name = "EELSDB Plugin" def __init__(self, main_window): super(EELSDBPlugin, self).__init__(main_window) self.window = None self.view = None def create_actions(self): self.add_action(self.name + '.browse', "Browse EELSDB", self.default, tip="Browse the EELSDB online database of standard" "EEL spectra") def create_menu(self): self.add_menuitem('EELS', self.ui.actions[self.name + '.browse']) def _make_request(self, url): request = QNetworkRequest() request.setUrl(QUrl(url)) return request def load_blocking(self, view, *args): loop = QEventLoop() view.loadFinished.connect(loop.quit) def unravel(): view.loadFinished.disconnect(loop.quit) view.loadFinished.disconnect(unravel) view.loadFinished.connect(unravel) view.load(*args) loop.exec_() def _on_link(self, url): su = url.toString(QUrl.RemoveQuery) if "/spectra/" in su: view = QWebView(self.ui) wp = QWebPage() 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) def download(self, url): header = {'Accept': r'text/html,application/xhtml+xml,' 'application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': r'gzip, deflate', 'User-Agent': r'Mozilla/5.0 (Windows NT 10.0; WOW64;' ' rv:43.0)Gecko/20100101 Firefox/43.0', } suffix = '.msa' req = urllib.request.Request(url, headers=header) page = urllib.request.urlopen(req) try: f = tempfile.NamedTemporaryFile(delete=False, suffix=suffix) fn = f.name f.write(page.read()) fn = f.name f.close() self.ui.load([fn]) finally: f.close() os.remove(fn) self.record_code("<p>.download(url='%s')" % url) def default(self): if self.window is None: self.window = ExToolWindow(self.ui) self.window.setWindowTitle("EELSDB") vbox = QVBoxLayout() self.window.setLayout(vbox) view = QWebView(self.ui) self.view = view vbox.addWidget(view) self.window.resize(self.view.sizeHint()) # Load spectra browser browse_url = QUrl("https://eelsdb.eu/spectra") self.load_blocking(self.view, browse_url) # Remove header/footer frame = self.view.page().mainFrame() frame.findFirstElement(".footer").removeFromDocument() for el in frame.findAllElements(".navbar"): el.removeFromDocument() self.view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) self.view.linkClicked.connect(self._on_link) self.window.show()