Пример #1
0
 def help(self):
     try:
         import pymantidplot
         pymantidplot.proxies.showCustomInterfaceHelp('DGS Planner')
     except ImportError:
         self.assistantProcess.close()
         self.assistantProcess.waitForFinished()
         helpapp = QtCore.QLibraryInfo.location(
             QtCore.QLibraryInfo.BinariesPath) + QtCore.QDir.separator()
         helpapp += 'assistant'
         args = [
             '-enableRemoteControl', '-collectionFile', self.collectionFile,
             '-showUrl', self.qtUrl
         ]
         if os.path.isfile(helpapp) and os.path.isfile(self.collectionFile):
             self.assistantProcess.close()
             self.assistantProcess.waitForFinished()
             self.assistantProcess.start(helpapp, args)
         else:
             try:
                 from mantidqtpython.MantidQt.API.MantidDesktopServices import openUrl
             except ImportError:
                 openUrl = QtGui.QDesktopServices.openUrl
             sysenv = QtCore.QProcessEnvironment.systemEnvironment()
             ldp = sysenv.value('LD_PRELOAD')
             if ldp:
                 del os.environ['LD_PRELOAD']
             openUrl(QtCore.QUrl(self.externalUrl))
             if ldp:
                 os.environ['LD_PRELOAD'] = ldp
Пример #2
0
def get_qt_web_widget(url):
    web = TimeSeriesWebEngineView()
    page = TimeSeriesWebEnginePage()
    page.setView(web)
    web.setPage(page)
    web.setUrl(QtCore.QUrl(url))
    return web, page
Пример #3
0
def __to_external_url(interface_name: str, section: str,
                      external_url: str) -> QtCore.QUrl:
    if not external_url:
        template = 'http://docs.mantidproject.org/nightly/interfaces/{}/{}.html'
        external_url = template.format(section, interface_name)

    return QtCore.QUrl(external_url)
Пример #4
0
 def _get_image(self, name):
     """ Returns the QImage stored as the ImageResource with 'name'.
     """
     document = self._control.document()
     image = document.resource(QtGui.QTextDocument.ImageResource,
                               QtCore.QUrl(name))
     return image
Пример #5
0
    def sendBugReport(self):
        if not self._excInfoSet():
            exctype, excvalue, tracebackobj = sys.exc_info()
        else:
            exctype = self.exctype
            excvalue = self.excvalue
            tracebackobj = self.tracebackobj

        error = traceback.format_exception_only(exctype, excvalue)[-1].strip()
        appname = QtWidgets.QApplication.applicationName()
        if appname:
            subject = f'[{appname}] Bug report - {error}'
        else:
            subject = 'Bug report - %s' % error
        body = '[Please insert your comments and additional info here.]'
        body += '\n\n' + '-' * 80 + '\n'
        body += ''.join(
            utils.format_bugreport(exctype,
                                   excvalue,
                                   tracebackobj,
                                   extra_info=qtsupport.format_qt_info()))

        url = QtCore.QUrl(f'mailto:{info.author} <{info.author_email}>')
        url.addQueryItem('subject', subject)
        url.addQueryItem('body', body)

        ret = QtGui.QDesktopServices.openUrl(url)
        if not ret:
            msg = self.tr('Unable to send the bug-report.\n'
                          'Please save the bug-report on file and send it '
                          'manually.')
            QtWidgets.QMessageBox.warning(self, self.tr('WARNING'), msg)
Пример #6
0
    def createHelpWindow(self):
        # http://www.walletfox.com/course/qhelpengineexample.php
        help_path = (Path(__file__).parent / 'TimeView.qhc').resolve()
        assert help_path.exists()
        help_engine = QtHelp.QHelpEngine(str(help_path))
        help_engine.setupData()

        tab_widget = QtWidgets.QTabWidget()
        tab_widget.setMaximumWidth(400)
        tab_widget.addTab(help_engine.contentWidget(), "Contents")
        tab_widget.addTab(help_engine.indexWidget(), "Index")

        text_viewer = HelpBrowser(help_engine)
        url = "qthelp://org.sphinx.timeview.1.0/doc/index.html"
        text_viewer.setSource(QtCore.QUrl(url))

        help_engine.contentWidget()\
                   .linkActivated['QUrl'].connect(text_viewer.setSource)
        help_engine.indexWidget()\
                   .linkActivated['QUrl', str].connect(text_viewer.setSource)

        horiz_splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        horiz_splitter.insertWidget(0, tab_widget)
        horiz_splitter.insertWidget(1, text_viewer)

        help_window = QtWidgets.QDockWidget('Help', self)
        help_window.setWidget(horiz_splitter)
        help_window.hide()
        self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, help_window)
        return help_window
Пример #7
0
def show_interface_help(mantidplot_name, assistant_process, collection_file,
                        qt_url, external_url):
    ''' Shows the help page for a custom interface
    @param mantidplot_name: used by showCustomInterfaceHelp
    @param assistant_process: needs to be started/closed from outside (see example below)
    @param collection_file: qth file containing the help in format used by qtassistant
    @param qt_url: location of the help in the qth file
    @param external_url: location of external page to be displayed in the default browser

    Example:

    #in the __init__ function of the GUI add:
    self.assistant_process = QtCore.QProcess(self)
    self.mantidplot_name='DGS Planner'
    self.collection_file = os.path.join(mantid._bindir, '../docs/qthelp/MantidProject.qhc')
    version = ".".join(mantid.__version__.split(".")[:2])
    self.qt_url = 'qthelp://org.sphinx.mantidproject.' + version + '/doc/interfaces/DGS Planner.html'
    self.external_url = 'http://docs.mantidproject.org/nightly/interfaces/DGS Planner.html'

    #add a help function in the GUI
    def help(self):
       show_interface_help(self.mantidplot_name,
                           self.assistant_process,
                           self.collection_file,
                           self.qt_url,
                           self.external_url)

    #make sure you close the qtassistant when the GUI is closed
    def closeEvent(self, event):
        self.assistant_process.close()
        self.assistant_process.waitForFinished()
        event.accept()
    '''
    try:
        import pymantidplot
        pymantidplot.proxies.showCustomInterfaceHelp(mantidplot_name)
    except:  #(ImportError, ModuleNotFoundError) raises the wrong type of error
        assistant_process.close()
        assistant_process.waitForFinished()
        helpapp = QtCore.QLibraryInfo.location(
            QtCore.QLibraryInfo.BinariesPath) + QtCore.QDir.separator()
        helpapp += 'assistant'
        args = [
            '-enableRemoteControl', '-collectionFile', collection_file,
            '-showUrl', qt_url
        ]
        if os.path.isfile(helpapp) and os.path.isfile(collection_file):
            assistant_process.close()
            assistant_process.waitForFinished()
            assistant_process.start(helpapp, args)
        else:
            openUrl = QtGui.QDesktopServices.openUrl
            sysenv = QtCore.QProcessEnvironment.systemEnvironment()
            ldp = sysenv.value('LD_PRELOAD')
            if ldp:
                del os.environ['LD_PRELOAD']
            openUrl(QtCore.QUrl(external_url))
            if ldp:
                os.environ['LD_PRELOAD'] = ldp
Пример #8
0
 def test_drop_load_data(self):
     m = QtCore.QMimeData()
     m.setUrls([QtCore.QUrl('test.fits')])
     e = MagicMock()
     e.mimeData.return_value = m
     load = MagicMock()
     self.app.load_data = load
     self.app.dropEvent(e)
     assert load.call_count == 1
Пример #9
0
    def setup_ui(self):
        dash_url = self.config.get('dashboard_url')
        if dash_url:
            self.ui.webbrowser.load(QtCore.QUrl(dash_url))

        self.ui.btn_open_browser.clicked.connect(self.handle_open_browser)

        self.setup_ev_range_labels()
        self.setup_tabs()
Пример #10
0
 def _add_image(self, image):
     """ Adds the specified QImage to the document and returns a
         QTextImageFormat that references it.
     """
     document = self._control.document()
     name = str(image.cacheKey())
     document.addResource(QtGui.QTextDocument.ImageResource,
                          QtCore.QUrl(name), image)
     format = QtGui.QTextImageFormat()
     format.setName(name)
     return format
Пример #11
0
    def api_reference(self):
        """
        Opens the API reference documentation of the GUI in a webbrowser.

        %(qt_slot)s

        """

        # Open webbrowser
        QG.QDesktopServices.openUrl(QC.QUrl(
            "https://prism-tool.readthedocs.io/en/latest/api/prism._gui.html"))
Пример #12
0
    def addSoftwareVersion(self, sw, version, link=''):
        tablewidget = self.versionsTableWidget
        index = tablewidget.rowCount()
        tablewidget.setRowCount(index + 1)

        tablewidget.setItem(index, 0, QtWidgets.QTableWidgetItem(sw))
        tablewidget.setItem(index, 1, QtWidgets.QTableWidgetItem(version))
        # tablewidget.setItem(row, 2, QtWidgets.QTableWidgetItem(link))
        linkLabel = QtWidgets.QLabel('<a href="{0}">{0}</a>'.format(link))
        linkLabel.linkActivated.connect(
            lambda text: QtGui.QDesktopServices.openUrl(QtCore.QUrl(text)))
        tablewidget.setCellWidget(index, 2, linkLabel)
Пример #13
0
 def copyURL(self):
     if not self.targetSceneNode:
         return
     cameraState = self.canvas.callMethod('view', 'saveCameraStateToString')
     path = self.targetSceneNode.getPath()
     url = self.getApp().makeURL('scene', path=path, camera=cameraState)
     #TODO: position
     mime = QtCore.QMimeData()
     mime.setUrls([QtCore.QUrl(url)])
     mime.setText(url)
     clipboard = QtWidgets.QApplication.clipboard()
     clipboard.setMimeData(mime)
Пример #14
0
    def _help(self):

        helpfile = os.sep.join((os.path.dirname(__file__) or '.', "help.html"))

        self.help_window = QtWidgets.QTextBrowser()
        self.help_window.resize(600, 400)
        self.help_window.setAttribute(QtCore.Qt.WA_QuitOnClose, False)
        self.help_window.setWindowTitle("Help")
        self.help_window.setSource(QtCore.QUrl(helpfile))
        self.help_window.setOpenLinks(False)
        self.help_window.anchorClicked.connect(self._help_open_external)
        self.help_window.show()
Пример #15
0
Файл: qt.py Проект: pkgw/pywwt
    def __init__(self, url, parent=None):
        super(WWTQtWidget, self).__init__(parent=parent)

        self.web = WWTWebEngineView()
        self.page = WWTQWebEnginePage()
        self.page.setView(self.web)
        self.web.setPage(self.page)
        self.web.setUrl(QtCore.QUrl(url))

        layout = QtWidgets.QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(layout)
        layout.addWidget(self.web)
Пример #16
0
 def CreatWebTab(self):#穿件一个TAB 用于网络 现在占时定义为百度
     if self.webTabFlag == False:
         self.BaiduView = QWebEngineView(self.centralwidget)
         self.BaiduView.setMinimumSize(QtCore.QSize(500, 400))
         self.BaiduView.setUrl(QtCore.QUrl("https://www.baidu.com/"))
         self.BaiduView.setObjectName("search")
         self.WebTab=self.GraphTab.addTab(self.BaiduView,'百度 view')
         self.setPlanEditor('打开web 信息')
         self.webTabFlag = True
     elif self.webTabFlag == True:
         self.WebTab=self.GraphTab.removeTab(1)
         self.setPlanEditor('关闭web 信息')
         self.webTabFlag = False
Пример #17
0
    def __init__(self, backend=None, tokenCallback=None):
        super(LoginWindow, self).__init__()
        self.state = None
        self.session = backend.session
        self.backend = backend

        auth_url, state = self.session.authorization_url(self.backend.auth_url)

        self.urlChanged.connect(self.check_URL)
        self.callback = tokenCallback

        self.load(QtCore.QUrl(auth_url))
        self.set_state(state)
Пример #18
0
    def openInGoogleMaps(self):
        """Open google-maps centering the map on scene centre.

        .. seealso:: http://mapki.com/wiki/Google_Map_Parameters

        """

        item = self._currentDatasetItem()
        if item is None:
            _log.info('no item selected.')
            QtWidgets.QMessageBox.information(
                self.app, self.tr('Information'),
                self.tr('No item selected.'))
            return

        try:
            cmapper = item.cmapper
        except AttributeError:
            _log.error(
                'item "%s" seems to have no geographic info.', item.filename)
            return

        lon, lat = cmapper.imgToGeoGrid([0.5, item.RasterXSize - 0.5],
                                        [0.5, item.RasterYSize - 0.5])
        deltalon = np.max(lon) - np.min(lon)
        deltalat = np.max(lat) - np.min(lat)
        zoomlon = np.floor(np.log2(360 / deltalon))
        zoomlat = np.floor(np.log2(180 / deltalat))
        zoomlevel = min(zoomlon, zoomlat) + 1

        pixel, line = item.RasterXSize / 2., item.RasterYSize / 2.
        lon, lat = cmapper.imgToGeoPoints(pixel, line)

        url = QtCore.QUrl('http://maps.google.com/maps')

        query = QtCore.QUrlQuery()

        query.addQueryItem('q', f'{float(lat):f}N,{float(lon):f}E')  # coords
        query.addQueryItem('t', 'h')                      # map type (hybrid)
        query.addQueryItem('z', str(zoomlevel))           # zoom level (1, 20)

        url.setQuery(query)

        success = QtGui.QDesktopServices.openUrl(url)
        if not success:
            _log.warning('unable to open URL: "%s"', url)
            # @TODO: check
            QtWidgets.QMessageBox.warning(
                self.app, self.tr('Warning'),
                self.tr('Unable to open URL: "%s"') % str(url))
Пример #19
0
    def on_activate(self, e):
        """ Initializes all needed UI files and establishes the connectors.

        @param object e: Fysom.event object from Fysom class.
                         An object created by the state machine module Fysom,
                         which is connected to a specific event (have a look in
                         the Base Class). This object contains the passed event,
                         the state before the event happened and the destination
                         of the state which should be reached after the event
                         had happened.
        """

        self._mw = NotebookMainWindow()
        url = QtCore.QUrl('http://localhost:8888')
        tw = self._mw.newTab()
        tw.load(url)
        self.restoreWindowPos(self._mw)
        self._mw.show()
Пример #20
0
    def __init__(self, url=None, parent=None):

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

        self.web = WWTWebEngineView()
        self.page = WWTQWebEnginePage()
        self.page.setView(self.web)
        self.web.setPage(self.page)
        self.web.setUrl(QtCore.QUrl(url))

        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)
Пример #21
0
    def load_markdown(self, md, url=None, tmpl=None):
        """
		desc:
			Loads a Markdown text string.

		arguments:
			md:		A Markdown text string.
			url:	The url to load.
			tmpl:	A template to be wrapped around the html.
		"""

        if url is None:
            url = u'untitled'
        url = QtCore.QUrl(u'http://opensesame.app.cogsci.nl/%s' % url)
        self.ui.top_widget.hide()
        html = self.markdown_parser.to_html(md)
        if tmpl is not None:
            html = tmpl % {u'body': html}
        self.ui.webview.setHtml(html, baseUrl=url)
Пример #22
0
    def event_startup(self):

        wv = WebView(self.main_window)
        wv.setHtml(
            HTML,
            QtCore.QUrl(u'http://opensesame.app.cogsci.nl/%s' %
                        metadata.__version__))
        wv.hide()
        if not QtNetwork.QNetworkConfigurationManager().isOnline() or \
         not cfg.analytics_show_notification:
            return
        self.extension_manager.fire(
            u'notify',
            message=
            _('Anonymous usage data is collected. You can disable this by disabling the <i>analytics</i> extension.'
              ),
            category=u'info',
            timeout=10000,
            buttontext=_(u'Got it!'))
        cfg.analytics_show_notification = False
Пример #23
0
    def test_drop_load_data(self):

        load_data = MagicMock()
        load_session = MagicMock()
        self.app.load_data = load_data
        self.app.restore_session_and_close = load_session

        e = MagicMock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test.fits')])
        e.mimeData.return_value = m

        self.app.dropEvent(e)
        assert load_data.called_once_with('test.fits')
        assert load_session.call_count == 0

        load_data.reset_mock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test1.fits'), QtCore.QUrl('test2.fits')])
        e.mimeData.return_value = m
        self.app.dropEvent(e)
        assert load_data.called_once_with(['test1.fits', 'test2.fits'])
        assert load_session.call_count == 0

        load_data.reset_mock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test.glu')])
        e.mimeData.return_value = m
        self.app.dropEvent(e)
        assert load_data.call_count == 0
        assert load_session.called_once_with(['test.glu'])

        load_data.reset_mock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test.glu'), QtCore.QUrl('test.fits')])
        e.mimeData.return_value = m
        with patch('qtpy.QtWidgets.QMessageBox') as mb:
            self.app.dropEvent(e)
            assert mb.call_count == 1
            assert "When dragging and dropping files" in mb.call_args[0][2]
            mb.reset_mock()

        load_data.reset_mock()
Пример #24
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 = QtWebEngineWidgets.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)
     # Remove header/footer
     frame = self.view.page().mainFrame()
     frame.findFirstElement(".footer").removeFromDocument()
     for el in frame.findAllElements(".navbar"):
         el.removeFromDocument()
     self.view.page().setLinkDelegationPolicy(
         QtWebEngineWidgets.QWebEnginePage.DelegateAllLinks)
     self.view.linkClicked.connect(self._on_link)
     self.window.show()
Пример #25
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()
Пример #26
0
    def test_drop_load_data(self):

        load_data = MagicMock()
        load_session = MagicMock()
        self.app.load_data = load_data
        self.app.restore_session_and_close = load_session

        e = MagicMock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test.fits')])
        e.mimeData.return_value = m

        self.app.dropEvent(e)
        assert load_data.called_once_with('test.fits')
        assert load_session.call_count == 0

        load_data.reset_mock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test1.fits'), QtCore.QUrl('test2.fits')])
        e.mimeData.return_value = m
        self.app.dropEvent(e)
        assert load_data.called_once_with(['test1.fits', 'test2.fits'])
        assert load_session.call_count == 0

        load_data.reset_mock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test.glu')])
        e.mimeData.return_value = m
        self.app.dropEvent(e)
        assert load_data.call_count == 0
        assert load_session.called_once_with(['test.glu'])

        load_data.reset_mock()

        m = QtCore.QMimeData()
        m.setUrls([QtCore.QUrl('test.glu'), QtCore.QUrl('test.fits')])
        e.mimeData.return_value = m
        with pytest.raises(Exception) as exc:
            self.app.dropEvent(e)
        assert exc.value.args[0].startswith("When dragging and dropping files")

        load_data.reset_mock()
Пример #27
0
    def displaySrc(self, src=False):
        """
        Displays a document in the `HelpBrowser` window.

        This slot is called when:

            - :meth:
                `vitables.docbrowser.bookmarksdlg.BookmarksDlg.displayBookmark`
                is launched
            - a new item is activated in the `History` combo
            - an entry is selected in the `Bookmarks` menu

        :Parameter src: the path of the file being displayed
        """

        if src is False: # entry selected in the Bookmarks menu
            action = self.gui.sender()
            src = action.data()

        src = QtCore.QDir(src).dirName()
        src = QtCore.QDir().fromNativeSeparators(src)
        url = QtCore.QUrl(src)
        self.gui.text_browser.setSource(url)
Пример #28
0
    def load(self, url, tmpl=None):
        """
		desc:
			Loads a webpage.

		arguments:
			url:	The url to load.
			tmpl:	A template to be wrapped around the html in the case of
					Markdown files.
		"""

        if isinstance(url, QtCore.QUrl):
            url = url.toString()
        if url.endswith(u'.md') and not url.startswith(u'http://') \
         and not url.startswith(u'https://'):
            self.ui.top_widget.hide()
            self.load_markdown(safe_read(url),
                               url=os.path.basename(url),
                               tmpl=tmpl)
            return
        self.ui.top_widget.show()
        self._current_url = url
        self.ui.webview.load(QtCore.QUrl(url))
Пример #29
0
    def _restoreFileDialogState(self, settings=None):
        if settings is None:
            settings = self.settings

        settings.beginGroup('filedialog')
        try:
            # state
            state = settings.value('state')
            if state is not None:
                try:
                    # QFileDialog.restoreState is new in Qt 4.3
                    self.filedialog.restoreState(state)
                except AttributeError:
                    _log.debug('unable to restore the file dialog state')

            # workdir
            workdir = settings.value('workdir', utils.default_workdir())
            workdir = os.path.expanduser(os.path.expandvars(workdir))
            self.filedialog.setDirectory(workdir)

            # history
            # history = settings.value('history')
            # if history:
            #     self.filedialog.setHistory(history)

            # sidebar urls
            try:
                # QFileDialog.setSidebarUrls is new in Qt 4.3
                sidebarurls = settings.value('sidebarurls')
                if sidebarurls:
                    sidebarurls = [QtCore.QUrl(item) for item in sidebarurls]
                    self.filedialog.setSidebarUrls(sidebarurls)
            except AttributeError:
                _log.debug('unable to restore sidebar URLs of the file dialog')
        finally:
            settings.endGroup()
Пример #30
0
    def Go(self):
        if len(self.gpxselectedlist) > 0:
            # Temporarily change cursor
            QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)

            # Clear up global variables
            self.proc_coords = []
            self.proc_measurements = []
            self.proc_state_means = []
            self.proc_state_vars = []
            self.proc_new_coords = []
            self.proc_new_gpx = []
            self.proc_coords_to_plot = []
            self.proc_coords_to_plot2 = []
            self.proc_balloondata = []

            # For every GPX file that is selected
            self.textWarningConsole.clear()
            for i, currentgpx in enumerate(self.gpxselectedlist):
                # Parse the GPX file
                gpx, coords, dinfos_before, warnings = bombo.ParseGPX(
                    currentgpx,
                    track_nr=0,
                    segment_nr=0,
                    use_srtm_elevation=bool(self.checkUseSRTM.isChecked()))
                self.textWarningConsole.append(warnings)

                # Kalman processing
                coords, measurements, state_means, state_vars, dinfos_during = bombo.ApplyKalmanFilter(
                    coords,
                    gpx,
                    method=self.comboBoxProcessingMethod.currentIndex(),
                    use_acceleration=self.checkUseAcceleration.isChecked(),
                    extra_smooth=self.checkExtraSmooth.isChecked(),
                    debug_plot=False)

                # Save data in GPX structure to compute speed and elevations
                new_coords, new_gpx, dinfos_after = bombo.SaveDataToCoordsAndGPX(
                    coords, state_means)

                # Update GUI with the computed stats
                parent = QtGui.QStandardItem(self.gpxselectednamelist[i])

                parent_beforeprocessing = QtGui.QStandardItem("Raw GPX stats")
                parent_beforeprocessing.appendRow([
                    QtGui.QStandardItem("Total distance"),
                    QtGui.QStandardItem(dinfos_before['total_distance'])
                ])
                parent_beforeprocessing_moving = QtGui.QStandardItem("Moving")
                parent_beforeprocessing_moving.appendRow([
                    QtGui.QStandardItem("Time"),
                    QtGui.QStandardItem(dinfos_before['moving_time'])
                ])
                parent_beforeprocessing_moving.appendRow([
                    QtGui.QStandardItem("Distance"),
                    QtGui.QStandardItem(dinfos_before['moving_distance'])
                ])
                parent_beforeprocessing.appendRow(
                    parent_beforeprocessing_moving)
                parent_beforeprocessing_idle = QtGui.QStandardItem("Idle")
                parent_beforeprocessing_idle.appendRow([
                    QtGui.QStandardItem("Time"),
                    QtGui.QStandardItem(dinfos_before['idle_time'])
                ])
                parent_beforeprocessing_idle.appendRow([
                    QtGui.QStandardItem("Distance"),
                    QtGui.QStandardItem(dinfos_before['idle_distance'])
                ])
                parent_beforeprocessing.appendRow(parent_beforeprocessing_idle)
                parent_beforeprocessing.appendRow([
                    QtGui.QStandardItem("Elevation"),
                    QtGui.QStandardItem(dinfos_before['elevation'])
                ])
                parent_beforeprocessing.appendRow([
                    QtGui.QStandardItem("Climb"),
                    QtGui.QStandardItem(dinfos_before['climb'])
                ])
                parent.appendRow(parent_beforeprocessing)

                parent.appendRow([
                    QtGui.QStandardItem("Samples"),
                    QtGui.QStandardItem(dinfos_during['nsamples'])
                ])
                parent.appendRow([
                    QtGui.QStandardItem("Total distance"),
                    QtGui.QStandardItem(dinfos_after['total_distance'])
                ])
                parent_moving = QtGui.QStandardItem("Moving")
                parent_moving.appendRow([
                    QtGui.QStandardItem("Time"),
                    QtGui.QStandardItem(dinfos_after['moving_time'])
                ])
                parent_moving.appendRow([
                    QtGui.QStandardItem("Distance"),
                    QtGui.QStandardItem(dinfos_after['moving_distance'])
                ])
                parent.appendRow(parent_moving)
                parent_idle = QtGui.QStandardItem("Idle")
                parent_idle.appendRow([
                    QtGui.QStandardItem("Time"),
                    QtGui.QStandardItem(dinfos_after['idle_time'])
                ])
                parent_idle.appendRow([
                    QtGui.QStandardItem("Distance"),
                    QtGui.QStandardItem(dinfos_after['idle_distance'])
                ])
                parent.appendRow(parent_idle)
                parent.appendRow([
                    QtGui.QStandardItem("Elevation"),
                    QtGui.QStandardItem(dinfos_after['elevation'])
                ])
                parent.appendRow([
                    QtGui.QStandardItem("Climb"),
                    QtGui.QStandardItem(dinfos_after['climb'])
                ])
                self.treemodel.appendRow(parent)

                # Create balloondata for the html plot
                balloondata = {
                    'distance':
                    np.cumsum(
                        bombo.HaversineDistance(np.asarray(new_coords['lat']),
                                                np.asarray(
                                                    new_coords['lon']))),
                    'elevation':
                    np.asarray(new_coords['ele']),
                    'speed':
                    None
                }

                # Create extra data for the html plot (fully implemented in bombo, not here)
                """
                data = np.ones((len(lat_cleaned),2))
                data[:,0] = h_filtered / np.max(h_filtered) * 0.0004
                data[:,1] = np.hstack((np.asarray([0]), speed_h)) / np.max(np.hstack((np.asarray([0]), speed_h))) * 0.0004
                tangentdata = {'data': data,
                               'sides': (0, 1),
                               'palette': ('blue','red')}
                """

                # Save relevant output in global variables
                self.proc_coords.append(coords)
                self.proc_measurements.append(measurements)
                self.proc_state_means.append(state_means)
                self.proc_state_vars.append(state_vars)
                self.proc_new_coords.append(new_coords)
                self.proc_new_gpx.append(new_gpx)
                self.proc_coords_to_plot.append(
                    np.vstack((new_coords['lat'], new_coords['lon'])).T)
                self.proc_coords_to_plot2.append(
                    np.vstack((coords['lat'], coords['lon'])).T)
                self.proc_balloondata.append(balloondata)

            # Restore original cursor
            QApplication.restoreOverrideCursor()

            # Generate embedded plots
            if len(self.gpxselectedlist) == 1:
                self.plotEmbeddedElevationAndSpeed.update_figure(
                    measurements, state_means, new_gpx.tracks[0].segments[0])
                self.plotEmbeddedDetails.update_figure(
                    measurements, state_means, state_vars,
                    new_gpx.tracks[0].segments[0])
            else:
                # Commentato per adesso
                # self.plotEmbeddedElevationAndSpeed.update_figure_multiple_tracks(self.proc_measurements, self.proc_state_means, self.proc_new_gpx)
                self.plotEmbeddedElevationAndSpeed.clear_figure()
                self.plotEmbeddedDetails.clear_figure()

            # Generate html plot, if only one track is selected, proceed with the complete output, otherwise just plot the traces
            if len(self.gpxselectedlist) is 1:
                bombo.PlotOnMap(
                    coords_array_list=self.proc_coords_to_plot,
                    coords_array2_list=self.proc_coords_to_plot2,
                    coords_palette=self.selectedpalette,
                    tangentdata=None,
                    balloondata_list=self.proc_balloondata,
                    rdp_reduction=self.checkUseRDP.isChecked(),
                    showmap=bool(self.check2DMapInExternalBrowser.isChecked()))
            else:
                bombo.PlotOnMap(
                    coords_array_list=self.proc_coords_to_plot,
                    coords_array2_list=None,
                    coords_palette=self.selectedpalette,
                    tangentdata=None,
                    balloondata_list=self.proc_balloondata,
                    rdp_reduction=self.checkUseRDP.isChecked(),
                    showmap=bool(self.check2DMapInExternalBrowser.isChecked()))

            self.map2d.load(QtCore.QUrl(bombo.MAP_2D_FILENAME))
            self.map2d.show()

            # Generate 3D plot, only with one track for the moment
            if len(self.gpxselectedlist) == 1:
                if self.check3DMapSelection.isChecked():
                    tile_selection = 'auto'
                else:
                    tile_selection = self.text3DMapName.text()
                terrain, track, warnings = bombo.Generate3DMap(
                    new_coords['lat'],
                    new_coords['lon'],
                    tile_selection=tile_selection,
                    margin=self.spinbox3DMargin.value(),
                    elevation_scale=self.spinbox3DElevationScale.value(),
                    mapping='coords',
                    use_osm_texture=True,
                    texture_type='osm',
                    texture_zoom=self.spinbox3DOSMZoom.value(),
                    texture_invert=self.check3DOSMInvert.isChecked(),
                    use_proxy=self.use_proxy,
                    proxy_data=self.proxy_config,
                    verbose=False)

                self.textWarningConsole.append(warnings)

                if terrain is not None:
                    self.map3d.update_plot(terrain, track)

        else:
            self.textWarningConsole.setText(
                "You need to open a .gpx file before!")
        return