Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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()
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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()
Exemplo n.º 8
0
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()
Exemplo n.º 9
0
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()