diff --git a/.travis.yml b/.travis.yml index 9ee486a43..89d898b12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ notifications: email: false python: # We don't actually use the Travis Python, but this keeps it organized. - - "3.5" + - "3.6" install: # - sudo apt-get update # Deactivate travis environnement : @@ -24,13 +24,28 @@ install: - conda info -a # Replace dep1 dep2 ... with your dependencies - - conda create -q -n testenv python=$TRAVIS_PYTHON_VERSION numpy scipy matplotlib=1.5.1 pip + - conda create -q -n testenv python=$TRAVIS_PYTHON_VERSION numpy scipy matplotlib pip - source activate testenv + # - pip install pyqt5 - pip install setuptools - pip install nose - pip install codecov + # - pip install pytest pytest-cov + - cd ../ - pip install -e git+https://github.com/vispy/vispy#egg=vispy-dev + - cd visbrain/ - pip install . # - pip install -r requirements.txt +# script: +# - py.test -v --cov=./ + +# # after_success: +# # - ./tools/travis-upload-wheel.sh script: bash build_install.sh + +notifications: + email: false + +after_success: + - codecov diff --git a/README.rst b/README.rst index ff65706d5..c81a7328f 100644 --- a/README.rst +++ b/README.rst @@ -3,6 +3,12 @@ .. image:: https://travis-ci.org/EtienneCmb/visbrain.svg?branch=master :target: https://travis-ci.org/EtienneCmb/visbrain +.. image:: https://codecov.io/gh/EtienneCmb/visbrain/branch/master/graph/badge.svg + :target: https://codecov.io/gh/EtienneCmb/visbrain + +.. image:: https://badge.fury.io/py/visbrain.svg + :target: https://badge.fury.io/py/visbrain + Visbrain ######## @@ -10,7 +16,7 @@ Visbrain :align: center -**Visbrain** is an open-source python package and provides hardware accelerated visualizations mainly for neuroscientific data. It is based on top of `VisPy `_ and PyQt and is distributed under the 3-Clause BSD license. We also provide an online `documentation `_, `examples and datasets `_ and can also be downloaded from `PyPi `_. +**Visbrain** is an open-source python package and provides hardware accelerated visualizations mainly for neuroscientific data. It is based on top of `VisPy `_ and PyQt and is distributed under the 3-Clause BSD license. We also provide an on line `documentation `_, `examples and datasets `_ and can also be downloaded from `PyPi `_. Right now, four modules are implemented, with the first three coming with a modular graphical interface : @@ -22,41 +28,36 @@ Right now, four modules are implemented, with the first three coming with a modu Installation ============ +Since version 0.2.8, Visbrain use PyQt5 and PyQt4 versions are no longer developed. Here, we only describe the installation of the PyQt5 version of Visbrain, but you can check the `documentation `_ for the installation of the older PyQt4 version. + Dependencies ------------ Visbrain requires : -* Numpy -* Scipy -* Vispy (*development version*) -* Matplotlib <= 1.5.1 -* PyQt4 +* NumPy +* SciPy +* VisPy (*development version*) +* Matplotlib >= 1.5.5 +* PyQt5 * Pillow User installation ----------------- -In a terminal, create and activate a 3.5 Python environment with the correct PyQt4 version : - -.. code-block:: shell - - conda create --yes -n visbrain python=3.5 numpy scipy pillow matplotlib=1.5.1 pip - activate visbrain - Install the latest VisPy version from Github : .. code-block:: shell pip install -e git+https://github.com/vispy/vispy#egg=vispy-dev -Finally, install Visbrain : +Then, install Visbrain : .. code-block:: shell pip install visbain -We also recommand to install pyopengl : +We also strongly recommend to install *pyopengl* : .. code-block:: shell @@ -73,7 +74,7 @@ The `Brain `_ module is primari * Integrate EEG/MEG/Intracranial sources/electrodes and connectivity. * Display Regions of Interest (ROI) based either on Brodmann or AAL atlases. * Project source's activity onto the brain/ROI surface. -* An extended control of colours. +* An extended control of colors. * Export in HD pictures with auto-cropping functionalities. * GUI or command line control. * `Examples and datasets `_. diff --git a/docs/conf.py b/docs/conf.py index cad764c23..6ced293f3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -64,9 +64,9 @@ # built documents. # # The short X.Y version. -version = '0.2.7' +version = '0.2.8' # The full version, including alpha/beta/rc tags. -release = '0.2.7' +release = '0.2.8' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/figure.rst b/docs/figure.rst index d9140ace6..5f834bbe2 100644 --- a/docs/figure.rst +++ b/docs/figure.rst @@ -39,7 +39,7 @@ Example f = Figure(files, titles=titles, figtitle='My figure', xlabels=xlabels, ylabels=ylabels, grid=(2, 2), ax_bgcolor=ax_bgcolor, y=1., fig_bgcolor=(0.098, 0.098, 0.098), figsize=(12, 12), - text_color='white', auto_crop=True) + text_color='white', autocrop=True) # Add a colorbar only to the second axis : f.colorbar_to_axis(1, (0, 1), 'viridis', title='Repartition', ticks='complete', diff --git a/docs/ico/sleep.png b/docs/ico/sleep.png new file mode 100644 index 000000000..2eb335b13 Binary files /dev/null and b/docs/ico/sleep.png differ diff --git a/docs/ico/visbrain.png b/docs/ico/visbrain.png new file mode 100644 index 000000000..8d0dc997f Binary files /dev/null and b/docs/ico/visbrain.png differ diff --git a/docs/ico/visbrain_128x128.png b/docs/ico/visbrain_128x128.png new file mode 100644 index 000000000..ee6b74d99 Binary files /dev/null and b/docs/ico/visbrain_128x128.png differ diff --git a/docs/index.rst b/docs/index.rst index bb82802da..987f3a027 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,6 +1,12 @@ .. image:: https://travis-ci.org/EtienneCmb/visbrain.svg?branch=master :target: https://travis-ci.org/EtienneCmb/visbrain +.. image:: https://codecov.io/gh/EtienneCmb/visbrain/branch/master/graph/badge.svg + :target: https://codecov.io/gh/EtienneCmb/visbrain + +.. image:: https://badge.fury.io/py/visbrain.svg + :target: https://badge.fury.io/py/visbrain + Visbrain documentation ###################### @@ -15,15 +21,42 @@ Visbrain is a python package in development and it's dedicated to neuroscience v Installation ************ -Here's the list of visbrain's dependancies : +Dependencies +============ + +Here's the list of visbrain's dependencies : * Numpy * Scipy * Vispy : fast graphics rendering * Matplotlib : mainly for colors and colormaps integration -* PyQt4 : Graphical User Interface components +* PyQt5 : Graphical User Interface components * Pillow : for screenshots and image file format support. +We also strongly recommend to install *pyopengl* : + +.. code-block:: shell + + pip install pyopengl + +PyQt5 version +============= + +For the PyQt5 version, Matplotlib's version should be >= 1.5.5. If PyQt is not installed, run either **pip install pyqt5** or **conda install pyqt**. Then, in a terminal run : + +.. code-block:: shell + + pip install -e git+https://github.com/vispy/vispy#egg=vispy-dev + +Finally, install Visbrain : + +.. code-block:: shell + + pip install visbain + +PyQt4 version +============= + New Python versions (>= 3.6) and Matplotlib comes by default with PyQt5 and this a limitation because Visbrain use the GUI backends PyQt4. We are working to port Visbrain to PyQt5 but right now, you'll have to use a Python version under 3.6 and define an isolated environnement (ex : python=3.5). In addition, Visbrain use new VisPy functionalities and the most up-to-date VisPy version on PyPi is obsolete so you will have to install VisPy from Github. First, in a terminal, create and activate a 3.5 Python environnement with the correct PyQt4 version : @@ -43,16 +76,22 @@ Finally, install Visbrain : .. code-block:: shell - pip install visbain + pip install visbain==0.2.7 -We also recommand to install pyopengl : +What's new? +*********** -.. code-block:: shell +* New in version v0.2.8 - pip install pyopengl + * Visbrain -What's new? -*********** + * Migration to PyQt5 + * Start new module *Colorbar* for a better integration of color controls and properties. + + * Sleep + + * Enable exporting colored hypnogram + * Bug fixing & GUI iprovements * New in version v0.2.3 @@ -62,21 +101,6 @@ What's new? * Detection improvements * Add link to script and datasets to the doc -* New in version v0.2.2 - - * Brain - - * Bug fixing - - * Sleep - - * Bug fixing - * Save and load GUI configuration - * Control the sleep stage order using the href input parameter - * Enable/disable the drag and drop on load - * Better Black and white hypnogram exportation - * New shortcuts - Future plans ************ @@ -85,8 +109,7 @@ Future plans * Visbrain - * PyQt5 migration - * pip and conda installation + * conda installation * Brain diff --git a/docs/sleep.rst b/docs/sleep.rst index a13ed69b9..71a476864 100644 --- a/docs/sleep.rst +++ b/docs/sleep.rst @@ -489,7 +489,11 @@ s Display / hide spectrogram t Display / hide topoplot h Display / hide hypnogram p Display / hide navigation bar +x Display / hide time axis +g Display / hide grid z Enable / disable zoom +i Enable / disable indicators +CTRL + Num Display / hide the channel Num [0, 9] CTRL + d Display quick settings panel CTRL + s Save hypnogram CTRL + n Screenshot window diff --git a/dvp/README b/dvp/README index 230667a56..8886a5302 100644 --- a/dvp/README +++ b/dvp/README @@ -3,3 +3,7 @@ The GUI has been developped using qt-designer. The software generate a *.ui file. This file is then transformed in a *.py using : pyuic4 path_to_visbrain/visbrain/vbrain/interface/gui/visbrain_gui.ui -o path_to_visbrain/visbrain/vbrain/interface/gui/visbrain_gui.py + +# PyQt5 : +Version linux a besoin d'être mise à jour : +pip install pyqt5==5.7.1 sip==4.19 \ No newline at end of file diff --git a/dvp/vbrain.todo b/dvp/brain.todo similarity index 95% rename from dvp/vbrain.todo rename to dvp/brain.todo index 91b8c2124..3f09c70e2 100644 --- a/dvp/vbrain.todo +++ b/dvp/brain.todo @@ -1,3 +1,8 @@ +Nouvelles fonctions + -5 Visu de signaux + -5 Visu de maps + -5 Compatibilité avec atlas + ROI (voir MNE pour le chargement) + Big problem -5 Améliorer la gestion de la mémoire + traquer les duplication de données. -5 Prendre la classe colorbar de ndviz et adapter avec. Ce sera nettement plus claire. @@ -24,6 +29,8 @@ doc Colorbar -5 Exportation de la colorbar ne marche pas bien (si GUI reste fermée). Il faudrait faire une petite opération sur le canvas pour le mettre à jour avant le screenshot + -5 Screenshot via commandline bug (choisir entre connectivité / projection) + -5 Colorbar screenshot -3 Ajouter un paramètre label pour chaque objet. +4 Ajouter dans color.py une fonction mpl_colormap(name, invert=False, mymap=None) qui retourne la liste de colorbar et qui teste si mymap est bien dans la liste. +5 La couleur du texte de la colorbar devrait pouvoir être fixé ou auto (en fonction de la couleur de fond) @@ -37,8 +44,8 @@ Sources +5 Ré-arranger le SourceBase càd découper en fonction, en incluant le checking d'args. Ensuite Projection - -5 Smooth projection -1 Projection temporelle, en tenant compte de la fréquence d'échantillonage + +5 Smooth projection +2 Ajouter un paramètre de smoothing exponentiel + filtre gaussien sur le final +5 Vérifier les dernières modifs liées à la projection corticale / répartition +4 Projection interne à peaufiner diff --git a/dvp/sleep.todo b/dvp/sleep.todo index 7d56dcb5c..b7f0e5703 100644 --- a/dvp/sleep.todo +++ b/dvp/sleep.todo @@ -25,12 +25,14 @@ Bug Etienne -5 Voir si je pourrai pas implémenter ma propre class GridLines qui serait peut-être plus facile à paramétrer + transformation non-linéaires -5 Clean des fillLocationTable pour peaks + -5 Exportation hypno devrait prendre en compte l'ordre des stades définit en entrée -5 Faire une unique fonction d'exportation de table : ça évitera tout les problèmes. -4 Zero reference (Tarek?) -4 Améliorer gestion et méthode topoplot -4 Hypnogramme: on pourrait faire une checkbox "Edit mode" qui lorsqu'elle est cochée permet d'activer les fonctions de modifications de l'hypno. Lorsque l'utilisateur la coche, il doit selectionner un nom de fichier d'hypnogramme, puis à chaque modification ça enregistre automatiquement dans le fichier .hyp ou .txt -3 Checking window par défaut : si les donnés sont trop courtes, cela pourrait engendrer un bug. -2 Découper les objets visuals + +5 Méthode de checking si les détections lancées ou pas (pour éviter le bug d'exportation si | détections) +5 Ajouter une reversed checkbox sur le spectrogramme pour inverser Spectral et refaire la figure de filtrage du papier. +5 Permettre de changer l'ordre des états de sommeil +5 Permettre à l'utilisateur d'enregistrer ses propres settings et de les charger diff --git a/dvp/visbrain.todo b/dvp/visbrain.todo index 219035fa8..8b72a851a 100644 --- a/dvp/visbrain.todo +++ b/dvp/visbrain.todo @@ -1,4 +1,19 @@ -Big problem +Todo + -5 Remplir le io puis remplacer tout ce qui est chargement/sauvegarde dans les autres modules + -5 Classe colorbar (Alternative, copier colorbar.py) + -4 Réorganiser le dossier picture/*module* + -4 Icone pour tout les modules + les mettre dans gui/ + -3 GUI screenshot HD avec picker de canvas + -3 What's new pour tout les modules + + +En cours -5 Compatibilité PyQt5 - -5 Améliorer procédure d'installation - -5 Augmenter partage de utils/ \ No newline at end of file + -5 Améliorer procédure d'installation + +Modules + -3 Connect (voir conn avec Raph) + -3 Topo + -3 Signal + -3 Image + -3 ERP \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e20803163..50904f253 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ numpy scipy -matplotlib<=1.5.1 +matplotlib>=1.5.5 +pyqt5 pillow diff --git a/setup.py b/setup.py index ba1021da0..b14c3b7f2 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ from pip.req import parse_requirements from optparse import Option -__version__ = "0.2.7" +__version__ = "0.2.8" NAME = 'visbrain' AUTHOR = "Visbrain developpers" MAINTAINER = "Etienne Combrisson" @@ -48,7 +48,7 @@ def read(fname): try: from vispy.scene.visuals import ColorBar except: - raise ValueError("You should install the right vispy version. In a " + raise ValueError("You should install the developer version of vispy. In a " "terminal, run : pip install -e git+https://github.com" "/vispy/vispy#egg=vispy-dev") diff --git a/test/test_imports.py b/test/test_imports.py index 47c8fa2cf..f2997ce44 100644 --- a/test/test_imports.py +++ b/test/test_imports.py @@ -13,7 +13,7 @@ def test_import_scipy(): def test_import_pyqt(): """Import PyQt""" - import PyQt4 + import PyQt5 def test_import_Brain(): """Import the Brain module.""" diff --git a/visbrain/__init__.py b/visbrain/__init__.py index 025c6fb8c..8134b5999 100644 --- a/visbrain/__init__.py +++ b/visbrain/__init__.py @@ -1,4 +1,19 @@ """ +Hardware accelerated graphics for neuscientific data +==================================================== + +visbrain is an open-source Python software mainly dedicated to the +visualization of neuroscientific data. It's developped on top of VisPy which +provides graphic renderings offloaded to the GPU. + +Right now, visbrain contains four modules : +* Brain : visualize EEG/MEG/Intracranial data and connectivity in a standard + MNI 3D brain. +* Sleep : visualize polysomnographic data and hypnogram edition. +* Ndviz : visualize multidimensional data and basic plotting forms. +* Figure : figure-layout for high-quality publication-like figures. + +See etiennecmb.github.io/visbrain for a complete and step-by step documentation """ from .brain.brain import Brain diff --git a/visbrain/brain/brain.py b/visbrain/brain/brain.py index 3f9282c16..c312df532 100644 --- a/visbrain/brain/brain.py +++ b/visbrain/brain/brain.py @@ -7,7 +7,7 @@ userfcn: initialize functions for user interaction. """ -from PyQt4 import QtGui +from PyQt5 import QtGui, QtWidgets import sys import os @@ -18,6 +18,8 @@ from .base import base from .user import userfcn from ..utils import GuideLines, ShortcutPopup +import sip +sip.setdestroyonexit(False) class Brain(uiInit, uiElements, base, userfcn): @@ -252,7 +254,7 @@ def __init__(self, *args, **kwargs): # ====================== App creation ====================== # Create the app and initialize all graphical elements : - self._app = QtGui.QApplication(sys.argv) + self._app = QtWidgets.QApplication(sys.argv) uiInit.__init__(self, bgcolor) # Shortcuts popup window : diff --git a/visbrain/brain/interface/ViewBase.py b/visbrain/brain/interface/ViewBase.py index d4563fa94..649febbb4 100644 --- a/visbrain/brain/interface/ViewBase.py +++ b/visbrain/brain/interface/ViewBase.py @@ -152,7 +152,7 @@ class vbCanvas(object): def __init__(self, bgcolor=(0, 0, 0)): """Init.""" # Initialize main canvas: - self.canvas = scene.SceneCanvas(keys='interactive', show=True, dpi=600, + self.canvas = scene.SceneCanvas(keys='interactive', show=False, dpi=600, bgcolor=bgcolor, fullscreen=True, resizable=True, position=(0, 250)) self.wc = self.canvas.central_widget.add_view() diff --git a/visbrain/brain/interface/gui/brain_gui.py b/visbrain/brain/interface/gui/brain_gui.py index 265850306..20dab9aa9 100644 --- a/visbrain/brain/interface/gui/brain_gui.py +++ b/visbrain/brain/interface/gui/brain_gui.py @@ -2,51 +2,38 @@ # Form implementation generated from reading ui file '/home/etienne/Toolbox/visbrain/visbrain/brain/interface/gui/brain_gui.ui' # -# Created by: PyQt4 UI code generator 4.11.4 +# Created by: PyQt5 UI code generator 5.8.2 # # WARNING! All changes made in this file will be lost! -from PyQt4 import QtCore, QtGui - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - def _fromUtf8(s): - return s - -try: - _encoding = QtGui.QApplication.UnicodeUTF8 - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) -except AttributeError: - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig) +from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): - MainWindow.setObjectName(_fromUtf8("MainWindow")) + MainWindow.setObjectName("MainWindow") MainWindow.setEnabled(True) MainWindow.resize(1513, 920) - MainWindow.setTabShape(QtGui.QTabWidget.Rounded) - self.centralwidget = QtGui.QWidget(MainWindow) - self.centralwidget.setObjectName(_fromUtf8("centralwidget")) - self.horizontalLayout_2 = QtGui.QHBoxLayout(self.centralwidget) - self.horizontalLayout_2.setMargin(0) + MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget) + self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setSpacing(0) - self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) - self.q_widget = QtGui.QWidget(self.centralwidget) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.q_widget = QtWidgets.QWidget(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.q_widget.sizePolicy().hasHeightForWidth()) self.q_widget.setSizePolicy(sizePolicy) self.q_widget.setMinimumSize(QtCore.QSize(0, 0)) self.q_widget.setMaximumSize(QtCore.QSize(400, 16777215)) - self.q_widget.setObjectName(_fromUtf8("q_widget")) - self.verticalLayout_4 = QtGui.QVBoxLayout(self.q_widget) - self.verticalLayout_4.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint) - self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) - self.QuickSettings = QtGui.QTabWidget(self.q_widget) + self.q_widget.setObjectName("q_widget") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.q_widget) + self.verticalLayout_4.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.QuickSettings = QtWidgets.QTabWidget(self.q_widget) self.QuickSettings.setMaximumSize(QtCore.QSize(16777215, 16777215)) font = QtGui.QFont() font.setBold(False) @@ -55,174 +42,175 @@ def setupUi(self, MainWindow): self.QuickSettings.setAutoFillBackground(True) self.QuickSettings.setDocumentMode(True) self.QuickSettings.setMovable(True) - self.QuickSettings.setObjectName(_fromUtf8("QuickSettings")) - self.q_UI = QtGui.QWidget() - self.q_UI.setObjectName(_fromUtf8("q_UI")) - self.verticalLayout = QtGui.QVBoxLayout(self.q_UI) - self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) - self.toolBox_3 = QtGui.QToolBox(self.q_UI) + self.QuickSettings.setObjectName("QuickSettings") + self.q_UI = QtWidgets.QWidget() + self.q_UI.setObjectName("q_UI") + self.verticalLayout = QtWidgets.QVBoxLayout(self.q_UI) + self.verticalLayout.setObjectName("verticalLayout") + self.toolBox_3 = QtWidgets.QToolBox(self.q_UI) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.toolBox_3.setFont(font) - self.toolBox_3.setObjectName(_fromUtf8("toolBox_3")) - self.page = QtGui.QWidget() + self.toolBox_3.setObjectName("toolBox_3") + self.page = QtWidgets.QWidget() self.page.setGeometry(QtCore.QRect(0, 0, 364, 611)) - self.page.setObjectName(_fromUtf8("page")) - self.verticalLayout_11 = QtGui.QVBoxLayout(self.page) - self.verticalLayout_11.setObjectName(_fromUtf8("verticalLayout_11")) - self.groupBox_8 = QtGui.QGroupBox(self.page) - self.groupBox_8.setObjectName(_fromUtf8("groupBox_8")) - self.verticalLayout_20 = QtGui.QVBoxLayout(self.groupBox_8) + self.page.setObjectName("page") + self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.page) + self.verticalLayout_11.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_11.setObjectName("verticalLayout_11") + self.groupBox_8 = QtWidgets.QGroupBox(self.page) + self.groupBox_8.setObjectName("groupBox_8") + self.verticalLayout_20 = QtWidgets.QVBoxLayout(self.groupBox_8) self.verticalLayout_20.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_20.setObjectName(_fromUtf8("verticalLayout_20")) - self.line_46 = QtGui.QFrame(self.groupBox_8) + self.verticalLayout_20.setObjectName("verticalLayout_20") + self.line_46 = QtWidgets.QFrame(self.groupBox_8) self.line_46.setMinimumSize(QtCore.QSize(200, 0)) - self.line_46.setFrameShape(QtGui.QFrame.HLine) - self.line_46.setFrameShadow(QtGui.QFrame.Sunken) - self.line_46.setObjectName(_fromUtf8("line_46")) + self.line_46.setFrameShape(QtWidgets.QFrame.HLine) + self.line_46.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_46.setObjectName("line_46") self.verticalLayout_20.addWidget(self.line_46) - self.gridLayout_36 = QtGui.QGridLayout() + self.gridLayout_36 = QtWidgets.QGridLayout() self.gridLayout_36.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_36.setObjectName(_fromUtf8("gridLayout_36")) - self.q_axial = QtGui.QPushButton(self.groupBox_8) + self.gridLayout_36.setObjectName("gridLayout_36") + self.q_axial = QtWidgets.QPushButton(self.groupBox_8) font = QtGui.QFont() font.setUnderline(False) self.q_axial.setFont(font) - self.q_axial.setObjectName(_fromUtf8("q_axial")) + self.q_axial.setObjectName("q_axial") self.gridLayout_36.addWidget(self.q_axial, 0, 4, 1, 1) - self.widget_10 = QtGui.QWidget(self.groupBox_8) + self.widget_10 = QtWidgets.QWidget(self.groupBox_8) self.widget_10.setMinimumSize(QtCore.QSize(30, 30)) - self.widget_10.setObjectName(_fromUtf8("widget_10")) - self.gridLayout_37 = QtGui.QGridLayout(self.widget_10) - self.gridLayout_37.setMargin(0) + self.widget_10.setObjectName("widget_10") + self.gridLayout_37 = QtWidgets.QGridLayout(self.widget_10) + self.gridLayout_37.setContentsMargins(0, 0, 0, 0) self.gridLayout_37.setSpacing(0) - self.gridLayout_37.setObjectName(_fromUtf8("gridLayout_37")) - self.c_Turnable = QtGui.QRadioButton(self.widget_10) + self.gridLayout_37.setObjectName("gridLayout_37") + self.c_Turnable = QtWidgets.QRadioButton(self.widget_10) self.c_Turnable.setMaximumSize(QtCore.QSize(100, 16777215)) self.c_Turnable.setChecked(True) - self.c_Turnable.setObjectName(_fromUtf8("c_Turnable")) + self.c_Turnable.setObjectName("c_Turnable") self.gridLayout_37.addWidget(self.c_Turnable, 0, 1, 1, 1) - self.c_Fly = QtGui.QRadioButton(self.widget_10) + self.c_Fly = QtWidgets.QRadioButton(self.widget_10) self.c_Fly.setMaximumSize(QtCore.QSize(100, 16777215)) - self.c_Fly.setObjectName(_fromUtf8("c_Fly")) + self.c_Fly.setObjectName("c_Fly") self.gridLayout_37.addWidget(self.c_Fly, 0, 3, 1, 1) - spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_37.addItem(spacerItem, 0, 0, 1, 1) - spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_37.addItem(spacerItem1, 0, 4, 1, 1) - spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_37.addItem(spacerItem2, 0, 2, 1, 1) self.gridLayout_36.addWidget(self.widget_10, 1, 2, 1, 3) - self.q_sagittal = QtGui.QPushButton(self.groupBox_8) + self.q_sagittal = QtWidgets.QPushButton(self.groupBox_8) font = QtGui.QFont() font.setUnderline(False) self.q_sagittal.setFont(font) - self.q_sagittal.setObjectName(_fromUtf8("q_sagittal")) + self.q_sagittal.setObjectName("q_sagittal") self.gridLayout_36.addWidget(self.q_sagittal, 0, 3, 1, 1) - self.label_111 = QtGui.QLabel(self.groupBox_8) + self.label_111 = QtWidgets.QLabel(self.groupBox_8) font = QtGui.QFont() font.setItalic(True) self.label_111.setFont(font) - self.label_111.setObjectName(_fromUtf8("label_111")) + self.label_111.setObjectName("label_111") self.gridLayout_36.addWidget(self.label_111, 1, 0, 1, 1) - self.label_110 = QtGui.QLabel(self.groupBox_8) + self.label_110 = QtWidgets.QLabel(self.groupBox_8) font = QtGui.QFont() font.setItalic(True) self.label_110.setFont(font) - self.label_110.setObjectName(_fromUtf8("label_110")) + self.label_110.setObjectName("label_110") self.gridLayout_36.addWidget(self.label_110, 0, 0, 1, 1) - self.q_coronal = QtGui.QPushButton(self.groupBox_8) + self.q_coronal = QtWidgets.QPushButton(self.groupBox_8) font = QtGui.QFont() font.setUnderline(False) self.q_coronal.setFont(font) self.q_coronal.setAutoDefault(True) self.q_coronal.setDefault(True) self.q_coronal.setFlat(False) - self.q_coronal.setObjectName(_fromUtf8("q_coronal")) + self.q_coronal.setObjectName("q_coronal") self.gridLayout_36.addWidget(self.q_coronal, 0, 2, 1, 1) - self.line_47 = QtGui.QFrame(self.groupBox_8) + self.line_47 = QtWidgets.QFrame(self.groupBox_8) self.line_47.setMinimumSize(QtCore.QSize(10, 0)) - self.line_47.setFrameShape(QtGui.QFrame.VLine) - self.line_47.setFrameShadow(QtGui.QFrame.Sunken) - self.line_47.setObjectName(_fromUtf8("line_47")) + self.line_47.setFrameShape(QtWidgets.QFrame.VLine) + self.line_47.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_47.setObjectName("line_47") self.gridLayout_36.addWidget(self.line_47, 0, 1, 1, 1) - self.line_48 = QtGui.QFrame(self.groupBox_8) + self.line_48 = QtWidgets.QFrame(self.groupBox_8) self.line_48.setMinimumSize(QtCore.QSize(10, 0)) - self.line_48.setFrameShape(QtGui.QFrame.VLine) - self.line_48.setFrameShadow(QtGui.QFrame.Sunken) - self.line_48.setObjectName(_fromUtf8("line_48")) + self.line_48.setFrameShape(QtWidgets.QFrame.VLine) + self.line_48.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_48.setObjectName("line_48") self.gridLayout_36.addWidget(self.line_48, 1, 1, 1, 1) self.verticalLayout_20.addLayout(self.gridLayout_36) self.verticalLayout_11.addWidget(self.groupBox_8) - self.groupBox_37 = QtGui.QGroupBox(self.page) - self.groupBox_37.setObjectName(_fromUtf8("groupBox_37")) - self.verticalLayout_37 = QtGui.QVBoxLayout(self.groupBox_37) + self.groupBox_37 = QtWidgets.QGroupBox(self.page) + self.groupBox_37.setObjectName("groupBox_37") + self.verticalLayout_37 = QtWidgets.QVBoxLayout(self.groupBox_37) self.verticalLayout_37.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_37.setObjectName(_fromUtf8("verticalLayout_37")) - self.line_44 = QtGui.QFrame(self.groupBox_37) + self.verticalLayout_37.setObjectName("verticalLayout_37") + self.line_44 = QtWidgets.QFrame(self.groupBox_37) self.line_44.setMinimumSize(QtCore.QSize(200, 0)) - self.line_44.setFrameShape(QtGui.QFrame.HLine) - self.line_44.setFrameShadow(QtGui.QFrame.Sunken) - self.line_44.setObjectName(_fromUtf8("line_44")) + self.line_44.setFrameShape(QtWidgets.QFrame.HLine) + self.line_44.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_44.setObjectName("line_44") self.verticalLayout_37.addWidget(self.line_44) - self.gridLayout_2 = QtGui.QGridLayout() + self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) - self.o_Sources = QtGui.QCheckBox(self.groupBox_37) + self.gridLayout_2.setObjectName("gridLayout_2") + self.o_Sources = QtWidgets.QCheckBox(self.groupBox_37) self.o_Sources.setChecked(True) - self.o_Sources.setObjectName(_fromUtf8("o_Sources")) + self.o_Sources.setObjectName("o_Sources") self.gridLayout_2.addWidget(self.o_Sources, 1, 1, 1, 1) - self.o_Brain = QtGui.QCheckBox(self.groupBox_37) + self.o_Brain = QtWidgets.QCheckBox(self.groupBox_37) self.o_Brain.setChecked(True) - self.o_Brain.setObjectName(_fromUtf8("o_Brain")) + self.o_Brain.setObjectName("o_Brain") self.gridLayout_2.addWidget(self.o_Brain, 1, 0, 1, 1) - self.o_Connect = QtGui.QCheckBox(self.groupBox_37) + self.o_Connect = QtWidgets.QCheckBox(self.groupBox_37) self.o_Connect.setChecked(True) - self.o_Connect.setObjectName(_fromUtf8("o_Connect")) + self.o_Connect.setObjectName("o_Connect") self.gridLayout_2.addWidget(self.o_Connect, 2, 0, 1, 1) - self.o_Text = QtGui.QCheckBox(self.groupBox_37) + self.o_Text = QtWidgets.QCheckBox(self.groupBox_37) self.o_Text.setChecked(True) - self.o_Text.setObjectName(_fromUtf8("o_Text")) + self.o_Text.setObjectName("o_Text") self.gridLayout_2.addWidget(self.o_Text, 1, 2, 1, 1) - self.frame = QtGui.QFrame(self.groupBox_37) + self.frame = QtWidgets.QFrame(self.groupBox_37) self.frame.setMinimumSize(QtCore.QSize(0, 0)) - self.frame.setFrameShape(QtGui.QFrame.StyledPanel) - self.frame.setFrameShadow(QtGui.QFrame.Sunken) - self.frame.setObjectName(_fromUtf8("frame")) - self.horizontalLayout_34 = QtGui.QHBoxLayout(self.frame) + self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame.setFrameShadow(QtWidgets.QFrame.Sunken) + self.frame.setObjectName("frame") + self.horizontalLayout_34 = QtWidgets.QHBoxLayout(self.frame) self.horizontalLayout_34.setContentsMargins(0, 3, 0, 3) self.horizontalLayout_34.setSpacing(0) - self.horizontalLayout_34.setObjectName(_fromUtf8("horizontalLayout_34")) - self.label_73 = QtGui.QLabel(self.frame) + self.horizontalLayout_34.setObjectName("horizontalLayout_34") + self.label_73 = QtWidgets.QLabel(self.frame) font = QtGui.QFont() font.setItalic(True) self.label_73.setFont(font) self.label_73.setAlignment(QtCore.Qt.AlignCenter) - self.label_73.setObjectName(_fromUtf8("label_73")) + self.label_73.setObjectName("label_73") self.horizontalLayout_34.addWidget(self.label_73) self.gridLayout_2.addWidget(self.frame, 0, 0, 1, 3) - self.o_Areas = QtGui.QCheckBox(self.groupBox_37) + self.o_Areas = QtWidgets.QCheckBox(self.groupBox_37) self.o_Areas.setEnabled(False) - self.o_Areas.setObjectName(_fromUtf8("o_Areas")) + self.o_Areas.setObjectName("o_Areas") self.gridLayout_2.addWidget(self.o_Areas, 2, 1, 1, 1) self.verticalLayout_37.addLayout(self.gridLayout_2) - self.gridLayout_12 = QtGui.QGridLayout() + self.gridLayout_12 = QtWidgets.QGridLayout() self.gridLayout_12.setContentsMargins(-1, 0, -1, -1) self.gridLayout_12.setHorizontalSpacing(3) self.gridLayout_12.setVerticalSpacing(0) - self.gridLayout_12.setObjectName(_fromUtf8("gridLayout_12")) - spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_12.setObjectName("gridLayout_12") + spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_12.addItem(spacerItem3, 3, 1, 1, 1) - self.label_4 = QtGui.QLabel(self.groupBox_37) + self.label_4 = QtWidgets.QLabel(self.groupBox_37) self.label_4.setMaximumSize(QtCore.QSize(16777215, 16777215)) font = QtGui.QFont() font.setPointSize(7) font.setUnderline(False) self.label_4.setFont(font) - self.label_4.setObjectName(_fromUtf8("label_4")) + self.label_4.setObjectName("label_4") self.gridLayout_12.addWidget(self.label_4, 3, 2, 1, 1) - self.OpacitySlider = QtGui.QSlider(self.groupBox_37) + self.OpacitySlider = QtWidgets.QSlider(self.groupBox_37) self.OpacitySlider.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.OpacitySlider.setAutoFillBackground(False) self.OpacitySlider.setMinimum(-5) @@ -232,48 +220,48 @@ def setupUi(self, MainWindow): self.OpacitySlider.setOrientation(QtCore.Qt.Horizontal) self.OpacitySlider.setInvertedAppearance(False) self.OpacitySlider.setInvertedControls(False) - self.OpacitySlider.setTickPosition(QtGui.QSlider.NoTicks) - self.OpacitySlider.setObjectName(_fromUtf8("OpacitySlider")) + self.OpacitySlider.setTickPosition(QtWidgets.QSlider.NoTicks) + self.OpacitySlider.setObjectName("OpacitySlider") self.gridLayout_12.addWidget(self.OpacitySlider, 2, 0, 1, 3) - spacerItem4 = QtGui.QSpacerItem(40, 10, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem4 = QtWidgets.QSpacerItem(40, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_12.addItem(spacerItem4, 1, 0, 1, 3) - self.label_3 = QtGui.QLabel(self.groupBox_37) + self.label_3 = QtWidgets.QLabel(self.groupBox_37) font = QtGui.QFont() font.setPointSize(7) font.setUnderline(False) self.label_3.setFont(font) - self.label_3.setObjectName(_fromUtf8("label_3")) + self.label_3.setObjectName("label_3") self.gridLayout_12.addWidget(self.label_3, 3, 0, 1, 1) - self.frame_2 = QtGui.QFrame(self.groupBox_37) + self.frame_2 = QtWidgets.QFrame(self.groupBox_37) self.frame_2.setMinimumSize(QtCore.QSize(0, 0)) - self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel) - self.frame_2.setFrameShadow(QtGui.QFrame.Raised) - self.frame_2.setObjectName(_fromUtf8("frame_2")) - self.horizontalLayout_35 = QtGui.QHBoxLayout(self.frame_2) + self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_2.setObjectName("frame_2") + self.horizontalLayout_35 = QtWidgets.QHBoxLayout(self.frame_2) self.horizontalLayout_35.setContentsMargins(0, 3, 0, 3) self.horizontalLayout_35.setSpacing(0) - self.horizontalLayout_35.setObjectName(_fromUtf8("horizontalLayout_35")) - self.label_74 = QtGui.QLabel(self.frame_2) + self.horizontalLayout_35.setObjectName("horizontalLayout_35") + self.label_74 = QtWidgets.QLabel(self.frame_2) font = QtGui.QFont() font.setItalic(True) self.label_74.setFont(font) self.label_74.setAlignment(QtCore.Qt.AlignCenter) - self.label_74.setObjectName(_fromUtf8("label_74")) + self.label_74.setObjectName("label_74") self.horizontalLayout_35.addWidget(self.label_74) self.gridLayout_12.addWidget(self.frame_2, 0, 0, 1, 3) self.verticalLayout_37.addLayout(self.gridLayout_12) - self.gridLayout_11 = QtGui.QGridLayout() + self.gridLayout_11 = QtWidgets.QGridLayout() self.gridLayout_11.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_11.setObjectName(_fromUtf8("gridLayout_11")) - self.ySlices_2 = QtGui.QSlider(self.groupBox_37) + self.gridLayout_11.setObjectName("gridLayout_11") + self.ySlices_2 = QtWidgets.QSlider(self.groupBox_37) self.ySlices_2.setMinimum(-140) self.ySlices_2.setMaximum(140) self.ySlices_2.setPageStep(1) self.ySlices_2.setProperty("value", -140) self.ySlices_2.setOrientation(QtCore.Qt.Horizontal) - self.ySlices_2.setObjectName(_fromUtf8("ySlices_2")) + self.ySlices_2.setObjectName("ySlices_2") self.gridLayout_11.addWidget(self.ySlices_2, 5, 2, 1, 1) - self.xSlices = QtGui.QSlider(self.groupBox_37) + self.xSlices = QtWidgets.QSlider(self.groupBox_37) self.xSlices.setMinimum(-110) self.xSlices.setMaximum(110) self.xSlices.setSingleStep(1) @@ -282,14 +270,14 @@ def setupUi(self, MainWindow): self.xSlices.setOrientation(QtCore.Qt.Horizontal) self.xSlices.setInvertedAppearance(True) self.xSlices.setInvertedControls(True) - self.xSlices.setObjectName(_fromUtf8("xSlices")) + self.xSlices.setObjectName("xSlices") self.gridLayout_11.addWidget(self.xSlices, 1, 2, 1, 1) - self.label_8 = QtGui.QLabel(self.groupBox_37) + self.label_8 = QtWidgets.QLabel(self.groupBox_37) self.label_8.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.label_8.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) - self.label_8.setObjectName(_fromUtf8("label_8")) + self.label_8.setObjectName("label_8") self.gridLayout_11.addWidget(self.label_8, 7, 0, 2, 1) - self.ySlices = QtGui.QSlider(self.groupBox_37) + self.ySlices = QtWidgets.QSlider(self.groupBox_37) self.ySlices.setMinimum(-140) self.ySlices.setMaximum(140) self.ySlices.setPageStep(1) @@ -297,14 +285,14 @@ def setupUi(self, MainWindow): self.ySlices.setOrientation(QtCore.Qt.Horizontal) self.ySlices.setInvertedAppearance(True) self.ySlices.setInvertedControls(True) - self.ySlices.setObjectName(_fromUtf8("ySlices")) + self.ySlices.setObjectName("ySlices") self.gridLayout_11.addWidget(self.ySlices, 4, 2, 1, 1) - self.label_6 = QtGui.QLabel(self.groupBox_37) + self.label_6 = QtWidgets.QLabel(self.groupBox_37) self.label_6.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.label_6.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) - self.label_6.setObjectName(_fromUtf8("label_6")) + self.label_6.setObjectName("label_6") self.gridLayout_11.addWidget(self.label_6, 1, 0, 2, 1) - self.zSlices = QtGui.QSlider(self.groupBox_37) + self.zSlices = QtWidgets.QSlider(self.groupBox_37) self.zSlices.setMinimum(-110) self.zSlices.setMaximum(110) self.zSlices.setPageStep(1) @@ -312,22 +300,22 @@ def setupUi(self, MainWindow): self.zSlices.setOrientation(QtCore.Qt.Horizontal) self.zSlices.setInvertedAppearance(True) self.zSlices.setInvertedControls(True) - self.zSlices.setObjectName(_fromUtf8("zSlices")) + self.zSlices.setObjectName("zSlices") self.gridLayout_11.addWidget(self.zSlices, 7, 2, 1, 1) - self.label_7 = QtGui.QLabel(self.groupBox_37) + self.label_7 = QtWidgets.QLabel(self.groupBox_37) self.label_7.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.label_7.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) - self.label_7.setObjectName(_fromUtf8("label_7")) + self.label_7.setObjectName("label_7") self.gridLayout_11.addWidget(self.label_7, 4, 0, 2, 1) - self.zSlices_2 = QtGui.QSlider(self.groupBox_37) + self.zSlices_2 = QtWidgets.QSlider(self.groupBox_37) self.zSlices_2.setMinimum(-110) self.zSlices_2.setMaximum(110) self.zSlices_2.setPageStep(1) self.zSlices_2.setProperty("value", -110) self.zSlices_2.setOrientation(QtCore.Qt.Horizontal) - self.zSlices_2.setObjectName(_fromUtf8("zSlices_2")) + self.zSlices_2.setObjectName("zSlices_2") self.gridLayout_11.addWidget(self.zSlices_2, 8, 2, 1, 1) - self.xSlices_2 = QtGui.QSlider(self.groupBox_37) + self.xSlices_2 = QtWidgets.QSlider(self.groupBox_37) self.xSlices_2.setMinimum(-110) self.xSlices_2.setMaximum(110) self.xSlices_2.setSingleStep(1) @@ -336,262 +324,264 @@ def setupUi(self, MainWindow): self.xSlices_2.setOrientation(QtCore.Qt.Horizontal) self.xSlices_2.setInvertedAppearance(False) self.xSlices_2.setInvertedControls(False) - self.xSlices_2.setObjectName(_fromUtf8("xSlices_2")) + self.xSlices_2.setObjectName("xSlices_2") self.gridLayout_11.addWidget(self.xSlices_2, 2, 2, 1, 1) - spacerItem5 = QtGui.QSpacerItem(40, 10, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem5 = QtWidgets.QSpacerItem(40, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_11.addItem(spacerItem5, 6, 2, 1, 1) - spacerItem6 = QtGui.QSpacerItem(40, 10, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem6 = QtWidgets.QSpacerItem(40, 10, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_11.addItem(spacerItem6, 3, 2, 1, 1) - self.line_32 = QtGui.QFrame(self.groupBox_37) + self.line_32 = QtWidgets.QFrame(self.groupBox_37) self.line_32.setMinimumSize(QtCore.QSize(10, 0)) - self.line_32.setFrameShape(QtGui.QFrame.VLine) - self.line_32.setFrameShadow(QtGui.QFrame.Sunken) - self.line_32.setObjectName(_fromUtf8("line_32")) + self.line_32.setFrameShape(QtWidgets.QFrame.VLine) + self.line_32.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_32.setObjectName("line_32") self.gridLayout_11.addWidget(self.line_32, 7, 1, 2, 1) - self.line_30 = QtGui.QFrame(self.groupBox_37) + self.line_30 = QtWidgets.QFrame(self.groupBox_37) self.line_30.setMinimumSize(QtCore.QSize(10, 0)) - self.line_30.setFrameShape(QtGui.QFrame.VLine) - self.line_30.setFrameShadow(QtGui.QFrame.Sunken) - self.line_30.setObjectName(_fromUtf8("line_30")) + self.line_30.setFrameShape(QtWidgets.QFrame.VLine) + self.line_30.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_30.setObjectName("line_30") self.gridLayout_11.addWidget(self.line_30, 1, 1, 2, 1) - self.line_31 = QtGui.QFrame(self.groupBox_37) + self.line_31 = QtWidgets.QFrame(self.groupBox_37) self.line_31.setMinimumSize(QtCore.QSize(10, 0)) - self.line_31.setFrameShape(QtGui.QFrame.VLine) - self.line_31.setFrameShadow(QtGui.QFrame.Sunken) - self.line_31.setObjectName(_fromUtf8("line_31")) + self.line_31.setFrameShape(QtWidgets.QFrame.VLine) + self.line_31.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_31.setObjectName("line_31") self.gridLayout_11.addWidget(self.line_31, 4, 1, 2, 1) - self.frame_3 = QtGui.QFrame(self.groupBox_37) + self.frame_3 = QtWidgets.QFrame(self.groupBox_37) self.frame_3.setMinimumSize(QtCore.QSize(0, 0)) - self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel) - self.frame_3.setFrameShadow(QtGui.QFrame.Raised) - self.frame_3.setObjectName(_fromUtf8("frame_3")) - self.horizontalLayout_77 = QtGui.QHBoxLayout(self.frame_3) + self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_3.setObjectName("frame_3") + self.horizontalLayout_77 = QtWidgets.QHBoxLayout(self.frame_3) self.horizontalLayout_77.setContentsMargins(0, 3, 0, 3) self.horizontalLayout_77.setSpacing(0) - self.horizontalLayout_77.setObjectName(_fromUtf8("horizontalLayout_77")) - self.label_75 = QtGui.QLabel(self.frame_3) + self.horizontalLayout_77.setObjectName("horizontalLayout_77") + self.label_75 = QtWidgets.QLabel(self.frame_3) font = QtGui.QFont() font.setItalic(True) self.label_75.setFont(font) self.label_75.setAlignment(QtCore.Qt.AlignCenter) - self.label_75.setObjectName(_fromUtf8("label_75")) + self.label_75.setObjectName("label_75") self.horizontalLayout_77.addWidget(self.label_75) self.gridLayout_11.addWidget(self.frame_3, 0, 0, 1, 3) self.verticalLayout_37.addLayout(self.gridLayout_11) - spacerItem7 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_37.addItem(spacerItem7) self.verticalLayout_11.addWidget(self.groupBox_37) - self.toolBox_3.addItem(self.page, _fromUtf8("")) - self.page_2 = QtGui.QWidget() + self.toolBox_3.addItem(self.page, "") + self.page_2 = QtWidgets.QWidget() self.page_2.setGeometry(QtCore.QRect(0, 0, 364, 611)) - self.page_2.setObjectName(_fromUtf8("page_2")) - self.verticalLayout_14 = QtGui.QVBoxLayout(self.page_2) - self.verticalLayout_14.setObjectName(_fromUtf8("verticalLayout_14")) - self.groupBox_3 = QtGui.QGroupBox(self.page_2) + self.page_2.setObjectName("page_2") + self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.page_2) + self.verticalLayout_14.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_14.setObjectName("verticalLayout_14") + self.groupBox_3 = QtWidgets.QGroupBox(self.page_2) self.groupBox_3.setMaximumSize(QtCore.QSize(16777215, 16777215)) - self.groupBox_3.setObjectName(_fromUtf8("groupBox_3")) - self.verticalLayout_18 = QtGui.QVBoxLayout(self.groupBox_3) + self.groupBox_3.setObjectName("groupBox_3") + self.verticalLayout_18 = QtWidgets.QVBoxLayout(self.groupBox_3) self.verticalLayout_18.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_18.setObjectName(_fromUtf8("verticalLayout_18")) - self.line_45 = QtGui.QFrame(self.groupBox_3) + self.verticalLayout_18.setObjectName("verticalLayout_18") + self.line_45 = QtWidgets.QFrame(self.groupBox_3) self.line_45.setMinimumSize(QtCore.QSize(200, 0)) - self.line_45.setFrameShape(QtGui.QFrame.HLine) - self.line_45.setFrameShadow(QtGui.QFrame.Sunken) - self.line_45.setObjectName(_fromUtf8("line_45")) + self.line_45.setFrameShape(QtWidgets.QFrame.HLine) + self.line_45.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_45.setObjectName("line_45") self.verticalLayout_18.addWidget(self.line_45) - self.gridLayout_38 = QtGui.QGridLayout() - self.gridLayout_38.setObjectName(_fromUtf8("gridLayout_38")) - self.label = QtGui.QLabel(self.groupBox_3) + self.gridLayout_38 = QtWidgets.QGridLayout() + self.gridLayout_38.setObjectName("gridLayout_38") + self.label = QtWidgets.QLabel(self.groupBox_3) font = QtGui.QFont() font.setItalic(True) self.label.setFont(font) - self.label.setObjectName(_fromUtf8("label")) + self.label.setObjectName("label") self.gridLayout_38.addWidget(self.label, 0, 1, 1, 1) - self.bgd_blue = QtGui.QDoubleSpinBox(self.groupBox_3) + self.bgd_blue = QtWidgets.QDoubleSpinBox(self.groupBox_3) self.bgd_blue.setDecimals(1) self.bgd_blue.setMaximum(1.0) self.bgd_blue.setSingleStep(0.1) - self.bgd_blue.setObjectName(_fromUtf8("bgd_blue")) + self.bgd_blue.setObjectName("bgd_blue") self.gridLayout_38.addWidget(self.bgd_blue, 0, 5, 1, 1) - self.bgd_red = QtGui.QDoubleSpinBox(self.groupBox_3) + self.bgd_red = QtWidgets.QDoubleSpinBox(self.groupBox_3) self.bgd_red.setDecimals(1) self.bgd_red.setMaximum(1.0) self.bgd_red.setSingleStep(0.1) - self.bgd_red.setObjectName(_fromUtf8("bgd_red")) + self.bgd_red.setObjectName("bgd_red") self.gridLayout_38.addWidget(self.bgd_red, 0, 3, 1, 1) - self.bgd_green = QtGui.QDoubleSpinBox(self.groupBox_3) + self.bgd_green = QtWidgets.QDoubleSpinBox(self.groupBox_3) self.bgd_green.setDecimals(1) self.bgd_green.setMaximum(1.0) self.bgd_green.setSingleStep(0.1) - self.bgd_green.setObjectName(_fromUtf8("bgd_green")) + self.bgd_green.setObjectName("bgd_green") self.gridLayout_38.addWidget(self.bgd_green, 0, 4, 1, 1) - self.line_50 = QtGui.QFrame(self.groupBox_3) + self.line_50 = QtWidgets.QFrame(self.groupBox_3) self.line_50.setMinimumSize(QtCore.QSize(10, 0)) - self.line_50.setFrameShape(QtGui.QFrame.VLine) - self.line_50.setFrameShadow(QtGui.QFrame.Sunken) - self.line_50.setObjectName(_fromUtf8("line_50")) + self.line_50.setFrameShape(QtWidgets.QFrame.VLine) + self.line_50.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_50.setObjectName("line_50") self.gridLayout_38.addWidget(self.line_50, 0, 2, 1, 1) self.verticalLayout_18.addLayout(self.gridLayout_38) self.verticalLayout_14.addWidget(self.groupBox_3) - self.groupBox = QtGui.QGroupBox(self.page_2) - self.groupBox.setObjectName(_fromUtf8("groupBox")) - self.verticalLayout_8 = QtGui.QVBoxLayout(self.groupBox) + self.groupBox = QtWidgets.QGroupBox(self.page_2) + self.groupBox.setObjectName("groupBox") + self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox) self.verticalLayout_8.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_8.setObjectName(_fromUtf8("verticalLayout_8")) - self.line_57 = QtGui.QFrame(self.groupBox) + self.verticalLayout_8.setObjectName("verticalLayout_8") + self.line_57 = QtWidgets.QFrame(self.groupBox) self.line_57.setMinimumSize(QtCore.QSize(200, 0)) - self.line_57.setFrameShape(QtGui.QFrame.HLine) - self.line_57.setFrameShadow(QtGui.QFrame.Sunken) - self.line_57.setObjectName(_fromUtf8("line_57")) + self.line_57.setFrameShape(QtWidgets.QFrame.HLine) + self.line_57.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_57.setObjectName("line_57") self.verticalLayout_8.addWidget(self.line_57) - self.gridLayout_14 = QtGui.QGridLayout() - self.gridLayout_14.setObjectName(_fromUtf8("gridLayout_14")) - self._ssAutoCrop = QtGui.QCheckBox(self.groupBox) + self.gridLayout_14 = QtWidgets.QGridLayout() + self.gridLayout_14.setObjectName("gridLayout_14") + self._ssAutoCrop = QtWidgets.QCheckBox(self.groupBox) font = QtGui.QFont() font.setItalic(True) self._ssAutoCrop.setFont(font) - self._ssAutoCrop.setObjectName(_fromUtf8("_ssAutoCrop")) + self._ssAutoCrop.setObjectName("_ssAutoCrop") self.gridLayout_14.addWidget(self._ssAutoCrop, 3, 0, 1, 4) - self._ssResolution = QtGui.QDoubleSpinBox(self.groupBox) + self._ssResolution = QtWidgets.QDoubleSpinBox(self.groupBox) self._ssResolution.setMaximum(999999999.0) - self._ssResolution.setObjectName(_fromUtf8("_ssResolution")) + self._ssResolution.setObjectName("_ssResolution") self.gridLayout_14.addWidget(self._ssResolution, 2, 2, 1, 2) - self._ssSaveAs = QtGui.QLineEdit(self.groupBox) - self._ssSaveAs.setObjectName(_fromUtf8("_ssSaveAs")) + self._ssSaveAs = QtWidgets.QLineEdit(self.groupBox) + self._ssSaveAs.setObjectName("_ssSaveAs") self.gridLayout_14.addWidget(self._ssSaveAs, 0, 2, 1, 1) - self.label_39 = QtGui.QLabel(self.groupBox) + self.label_39 = QtWidgets.QLabel(self.groupBox) font = QtGui.QFont() font.setItalic(True) self.label_39.setFont(font) - self.label_39.setObjectName(_fromUtf8("label_39")) + self.label_39.setObjectName("label_39") self.gridLayout_14.addWidget(self.label_39, 0, 0, 1, 1) - self.label_40 = QtGui.QLabel(self.groupBox) + self.label_40 = QtWidgets.QLabel(self.groupBox) font = QtGui.QFont() font.setItalic(True) self.label_40.setFont(font) - self.label_40.setObjectName(_fromUtf8("label_40")) + self.label_40.setObjectName("label_40") self.gridLayout_14.addWidget(self.label_40, 2, 0, 1, 1) - self._ssSaveAsExt = QtGui.QComboBox(self.groupBox) - self._ssSaveAsExt.setObjectName(_fromUtf8("_ssSaveAsExt")) - self._ssSaveAsExt.addItem(_fromUtf8("")) - self._ssSaveAsExt.addItem(_fromUtf8("")) - self._ssSaveAsExt.addItem(_fromUtf8("")) + self._ssSaveAsExt = QtWidgets.QComboBox(self.groupBox) + self._ssSaveAsExt.setObjectName("_ssSaveAsExt") + self._ssSaveAsExt.addItem("") + self._ssSaveAsExt.addItem("") + self._ssSaveAsExt.addItem("") self.gridLayout_14.addWidget(self._ssSaveAsExt, 0, 3, 1, 1) - self.line_60 = QtGui.QFrame(self.groupBox) + self.line_60 = QtWidgets.QFrame(self.groupBox) self.line_60.setMinimumSize(QtCore.QSize(10, 0)) - self.line_60.setFrameShape(QtGui.QFrame.VLine) - self.line_60.setFrameShadow(QtGui.QFrame.Sunken) - self.line_60.setObjectName(_fromUtf8("line_60")) + self.line_60.setFrameShape(QtWidgets.QFrame.VLine) + self.line_60.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_60.setObjectName("line_60") self.gridLayout_14.addWidget(self.line_60, 1, 1, 1, 1) - self._ssCbEnable = QtGui.QCheckBox(self.groupBox) + self._ssCbEnable = QtWidgets.QCheckBox(self.groupBox) font = QtGui.QFont() font.setItalic(True) self._ssCbEnable.setFont(font) - self._ssCbEnable.setObjectName(_fromUtf8("_ssCbEnable")) + self._ssCbEnable.setObjectName("_ssCbEnable") self.gridLayout_14.addWidget(self._ssCbEnable, 4, 0, 1, 4) - self._ssCropEnable = QtGui.QCheckBox(self.groupBox) + self._ssCropEnable = QtWidgets.QCheckBox(self.groupBox) font = QtGui.QFont() font.setItalic(True) self._ssCropEnable.setFont(font) self._ssCropEnable.setTristate(False) - self._ssCropEnable.setObjectName(_fromUtf8("_ssCropEnable")) + self._ssCropEnable.setObjectName("_ssCropEnable") self.gridLayout_14.addWidget(self._ssCropEnable, 1, 0, 1, 1) - self.line_59 = QtGui.QFrame(self.groupBox) + self.line_59 = QtWidgets.QFrame(self.groupBox) self.line_59.setMinimumSize(QtCore.QSize(10, 0)) - self.line_59.setFrameShape(QtGui.QFrame.VLine) - self.line_59.setFrameShadow(QtGui.QFrame.Sunken) - self.line_59.setObjectName(_fromUtf8("line_59")) + self.line_59.setFrameShape(QtWidgets.QFrame.VLine) + self.line_59.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_59.setObjectName("line_59") self.gridLayout_14.addWidget(self.line_59, 0, 1, 1, 1) - self.line_61 = QtGui.QFrame(self.groupBox) + self.line_61 = QtWidgets.QFrame(self.groupBox) self.line_61.setMinimumSize(QtCore.QSize(10, 0)) - self.line_61.setFrameShape(QtGui.QFrame.VLine) - self.line_61.setFrameShadow(QtGui.QFrame.Sunken) - self.line_61.setObjectName(_fromUtf8("line_61")) + self.line_61.setFrameShape(QtWidgets.QFrame.VLine) + self.line_61.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_61.setObjectName("line_61") self.gridLayout_14.addWidget(self.line_61, 2, 1, 1, 1) - self._ssCropW = QtGui.QWidget(self.groupBox) + self._ssCropW = QtWidgets.QWidget(self.groupBox) self._ssCropW.setEnabled(False) - self._ssCropW.setObjectName(_fromUtf8("_ssCropW")) - self.gridLayout_15 = QtGui.QGridLayout(self._ssCropW) - self.gridLayout_15.setMargin(0) - self.gridLayout_15.setObjectName(_fromUtf8("gridLayout_15")) - self._ssCropYs = QtGui.QSpinBox(self._ssCropW) + self._ssCropW.setObjectName("_ssCropW") + self.gridLayout_15 = QtWidgets.QGridLayout(self._ssCropW) + self.gridLayout_15.setContentsMargins(0, 0, 0, 0) + self.gridLayout_15.setObjectName("gridLayout_15") + self._ssCropYs = QtWidgets.QSpinBox(self._ssCropW) self._ssCropYs.setMaximum(9999) - self._ssCropYs.setObjectName(_fromUtf8("_ssCropYs")) + self._ssCropYs.setObjectName("_ssCropYs") self.gridLayout_15.addWidget(self._ssCropYs, 0, 1, 1, 1) - self._ssCropYe = QtGui.QSpinBox(self._ssCropW) + self._ssCropYe = QtWidgets.QSpinBox(self._ssCropW) self._ssCropYe.setMaximum(9999) - self._ssCropYe.setObjectName(_fromUtf8("_ssCropYe")) + self._ssCropYe.setObjectName("_ssCropYe") self.gridLayout_15.addWidget(self._ssCropYe, 0, 3, 1, 1) - self._ssCropXe = QtGui.QSpinBox(self._ssCropW) + self._ssCropXe = QtWidgets.QSpinBox(self._ssCropW) self._ssCropXe.setMaximum(9999) - self._ssCropXe.setObjectName(_fromUtf8("_ssCropXe")) + self._ssCropXe.setObjectName("_ssCropXe") self.gridLayout_15.addWidget(self._ssCropXe, 0, 2, 1, 1) - self._ssCropXs = QtGui.QSpinBox(self._ssCropW) + self._ssCropXs = QtWidgets.QSpinBox(self._ssCropW) self._ssCropXs.setMaximum(9999) - self._ssCropXs.setObjectName(_fromUtf8("_ssCropXs")) + self._ssCropXs.setObjectName("_ssCropXs") self.gridLayout_15.addWidget(self._ssCropXs, 0, 0, 1, 1) - self._ssGuide = QtGui.QCheckBox(self._ssCropW) + self._ssGuide = QtWidgets.QCheckBox(self._ssCropW) self._ssGuide.setEnabled(False) self._ssGuide.setChecked(False) - self._ssGuide.setObjectName(_fromUtf8("_ssGuide")) + self._ssGuide.setObjectName("_ssGuide") self.gridLayout_15.addWidget(self._ssGuide, 1, 0, 1, 4) self.gridLayout_14.addWidget(self._ssCropW, 1, 2, 1, 2) - self.widget_4 = QtGui.QWidget(self.groupBox) + self.widget_4 = QtWidgets.QWidget(self.groupBox) self.widget_4.setMinimumSize(QtCore.QSize(0, 0)) - self.widget_4.setObjectName(_fromUtf8("widget_4")) - self.horizontalLayout_5 = QtGui.QHBoxLayout(self.widget_4) - self.horizontalLayout_5.setContentsMargins(0, -1, 0, 0) + self.widget_4.setObjectName("widget_4") + self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.widget_4) + self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_5.setSpacing(0) - self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5")) - spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem8) - self._ssRun = QtGui.QPushButton(self.widget_4) - self._ssRun.setObjectName(_fromUtf8("_ssRun")) + self._ssRun = QtWidgets.QPushButton(self.widget_4) + self._ssRun.setObjectName("_ssRun") self.horizontalLayout_5.addWidget(self._ssRun) - spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem9) self.gridLayout_14.addWidget(self.widget_4, 5, 0, 1, 4) self.verticalLayout_8.addLayout(self.gridLayout_14) self.verticalLayout_14.addWidget(self.groupBox) - spacerItem10 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_14.addItem(spacerItem10) - self.toolBox_3.addItem(self.page_2, _fromUtf8("")) - self.page_3 = QtGui.QWidget() + self.toolBox_3.addItem(self.page_2, "") + self.page_3 = QtWidgets.QWidget() self.page_3.setGeometry(QtCore.QRect(0, 0, 324, 224)) - self.page_3.setObjectName(_fromUtf8("page_3")) - self.verticalLayout_15 = QtGui.QVBoxLayout(self.page_3) - self.verticalLayout_15.setObjectName(_fromUtf8("verticalLayout_15")) - self.groupBox_5 = QtGui.QGroupBox(self.page_3) - self.groupBox_5.setObjectName(_fromUtf8("groupBox_5")) - self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox_5) + self.page_3.setObjectName("page_3") + self.verticalLayout_15 = QtWidgets.QVBoxLayout(self.page_3) + self.verticalLayout_15.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_15.setObjectName("verticalLayout_15") + self.groupBox_5 = QtWidgets.QGroupBox(self.page_3) + self.groupBox_5.setObjectName("groupBox_5") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_5) self.verticalLayout_2.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) - self.line_41 = QtGui.QFrame(self.groupBox_5) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.line_41 = QtWidgets.QFrame(self.groupBox_5) self.line_41.setMinimumSize(QtCore.QSize(200, 0)) - self.line_41.setFrameShape(QtGui.QFrame.HLine) - self.line_41.setFrameShadow(QtGui.QFrame.Sunken) - self.line_41.setObjectName(_fromUtf8("line_41")) + self.line_41.setFrameShape(QtWidgets.QFrame.HLine) + self.line_41.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_41.setObjectName("line_41") self.verticalLayout_2.addWidget(self.line_41) - self.gridLayout_13 = QtGui.QGridLayout() + self.gridLayout_13 = QtWidgets.QGridLayout() self.gridLayout_13.setContentsMargins(-1, 0, -1, -1) self.gridLayout_13.setVerticalSpacing(12) - self.gridLayout_13.setObjectName(_fromUtf8("gridLayout_13")) - self.label_34 = QtGui.QLabel(self.groupBox_5) + self.gridLayout_13.setObjectName("gridLayout_13") + self.label_34 = QtWidgets.QLabel(self.groupBox_5) font = QtGui.QFont() font.setItalic(True) self.label_34.setFont(font) - self.label_34.setObjectName(_fromUtf8("label_34")) + self.label_34.setObjectName("label_34") self.gridLayout_13.addWidget(self.label_34, 3, 0, 1, 1) - self.label_13 = QtGui.QLabel(self.groupBox_5) - self.label_13.setObjectName(_fromUtf8("label_13")) + self.label_13 = QtWidgets.QLabel(self.groupBox_5) + self.label_13.setObjectName("label_13") self.gridLayout_13.addWidget(self.label_13, 5, 2, 1, 1) - self.label_35 = QtGui.QLabel(self.groupBox_5) + self.label_35 = QtWidgets.QLabel(self.groupBox_5) font = QtGui.QFont() font.setItalic(True) self.label_35.setFont(font) - self.label_35.setObjectName(_fromUtf8("label_35")) + self.label_35.setObjectName("label_35") self.gridLayout_13.addWidget(self.label_35, 4, 0, 2, 1) - self.uil_colR = QtGui.QDoubleSpinBox(self.groupBox_5) + self.uil_colR = QtWidgets.QDoubleSpinBox(self.groupBox_5) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -600,31 +590,31 @@ def setupUi(self, MainWindow): self.uil_colR.setMaximum(1.0) self.uil_colR.setSingleStep(0.1) self.uil_colR.setProperty("value", 1.0) - self.uil_colR.setObjectName(_fromUtf8("uil_colR")) + self.uil_colR.setObjectName("uil_colR") self.gridLayout_13.addWidget(self.uil_colR, 3, 2, 1, 1) - self.label_9 = QtGui.QLabel(self.groupBox_5) - self.label_9.setObjectName(_fromUtf8("label_9")) + self.label_9 = QtWidgets.QLabel(self.groupBox_5) + self.label_9.setObjectName("label_9") self.gridLayout_13.addWidget(self.label_9, 4, 2, 1, 1) - self.label_36 = QtGui.QLabel(self.groupBox_5) + self.label_36 = QtWidgets.QLabel(self.groupBox_5) font = QtGui.QFont() font.setItalic(True) self.label_36.setFont(font) - self.label_36.setObjectName(_fromUtf8("label_36")) + self.label_36.setObjectName("label_36") self.gridLayout_13.addWidget(self.label_36, 2, 0, 1, 1) - self.line_35 = QtGui.QFrame(self.groupBox_5) + self.line_35 = QtWidgets.QFrame(self.groupBox_5) self.line_35.setMinimumSize(QtCore.QSize(10, 0)) - self.line_35.setFrameShape(QtGui.QFrame.VLine) - self.line_35.setFrameShadow(QtGui.QFrame.Sunken) - self.line_35.setObjectName(_fromUtf8("line_35")) + self.line_35.setFrameShape(QtWidgets.QFrame.VLine) + self.line_35.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_35.setObjectName("line_35") self.gridLayout_13.addWidget(self.line_35, 3, 1, 1, 1) - self.widget_8 = QtGui.QWidget(self.groupBox_5) + self.widget_8 = QtWidgets.QWidget(self.groupBox_5) self.widget_8.setMinimumSize(QtCore.QSize(30, 0)) - self.widget_8.setObjectName(_fromUtf8("widget_8")) - self.horizontalLayout_90 = QtGui.QHBoxLayout(self.widget_8) - self.horizontalLayout_90.setMargin(0) + self.widget_8.setObjectName("widget_8") + self.horizontalLayout_90 = QtWidgets.QHBoxLayout(self.widget_8) + self.horizontalLayout_90.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_90.setSpacing(3) - self.horizontalLayout_90.setObjectName(_fromUtf8("horizontalLayout_90")) - self.uil_intX = QtGui.QDoubleSpinBox(self.widget_8) + self.horizontalLayout_90.setObjectName("horizontalLayout_90") + self.uil_intX = QtWidgets.QDoubleSpinBox(self.widget_8) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -633,9 +623,9 @@ def setupUi(self, MainWindow): self.uil_intX.setMaximum(1.0) self.uil_intX.setSingleStep(0.1) self.uil_intX.setProperty("value", 1.0) - self.uil_intX.setObjectName(_fromUtf8("uil_intX")) + self.uil_intX.setObjectName("uil_intX") self.horizontalLayout_90.addWidget(self.uil_intX) - self.uil_intY = QtGui.QDoubleSpinBox(self.widget_8) + self.uil_intY = QtWidgets.QDoubleSpinBox(self.widget_8) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -644,9 +634,9 @@ def setupUi(self, MainWindow): self.uil_intY.setMaximum(1.0) self.uil_intY.setSingleStep(0.1) self.uil_intY.setProperty("value", 1.0) - self.uil_intY.setObjectName(_fromUtf8("uil_intY")) + self.uil_intY.setObjectName("uil_intY") self.horizontalLayout_90.addWidget(self.uil_intY) - self.uil_intZ = QtGui.QDoubleSpinBox(self.widget_8) + self.uil_intZ = QtWidgets.QDoubleSpinBox(self.widget_8) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -655,10 +645,10 @@ def setupUi(self, MainWindow): self.uil_intZ.setMaximum(1.0) self.uil_intZ.setSingleStep(0.1) self.uil_intZ.setProperty("value", 1.0) - self.uil_intZ.setObjectName(_fromUtf8("uil_intZ")) + self.uil_intZ.setObjectName("uil_intZ") self.horizontalLayout_90.addWidget(self.uil_intZ) self.gridLayout_13.addWidget(self.widget_8, 2, 2, 1, 4) - self.uil_colG = QtGui.QDoubleSpinBox(self.groupBox_5) + self.uil_colG = QtWidgets.QDoubleSpinBox(self.groupBox_5) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -667,9 +657,9 @@ def setupUi(self, MainWindow): self.uil_colG.setMaximum(1.0) self.uil_colG.setSingleStep(0.1) self.uil_colG.setProperty("value", 1.0) - self.uil_colG.setObjectName(_fromUtf8("uil_colG")) + self.uil_colG.setObjectName("uil_colG") self.gridLayout_13.addWidget(self.uil_colG, 3, 3, 1, 1) - self.uil_AmbCoef = QtGui.QDoubleSpinBox(self.groupBox_5) + self.uil_AmbCoef = QtWidgets.QDoubleSpinBox(self.groupBox_5) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -677,31 +667,31 @@ def setupUi(self, MainWindow): self.uil_AmbCoef.setMaximum(1.0) self.uil_AmbCoef.setSingleStep(0.1) self.uil_AmbCoef.setProperty("value", 0.13) - self.uil_AmbCoef.setObjectName(_fromUtf8("uil_AmbCoef")) + self.uil_AmbCoef.setObjectName("uil_AmbCoef") self.gridLayout_13.addWidget(self.uil_AmbCoef, 4, 3, 1, 3) - self.uil_SpecCoef = QtGui.QDoubleSpinBox(self.groupBox_5) + self.uil_SpecCoef = QtWidgets.QDoubleSpinBox(self.groupBox_5) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.uil_SpecCoef.setFont(font) self.uil_SpecCoef.setSingleStep(0.1) self.uil_SpecCoef.setProperty("value", 0.5) - self.uil_SpecCoef.setObjectName(_fromUtf8("uil_SpecCoef")) + self.uil_SpecCoef.setObjectName("uil_SpecCoef") self.gridLayout_13.addWidget(self.uil_SpecCoef, 5, 3, 1, 3) - self.label_33 = QtGui.QLabel(self.groupBox_5) + self.label_33 = QtWidgets.QLabel(self.groupBox_5) font = QtGui.QFont() font.setItalic(True) self.label_33.setFont(font) - self.label_33.setObjectName(_fromUtf8("label_33")) + self.label_33.setObjectName("label_33") self.gridLayout_13.addWidget(self.label_33, 1, 0, 1, 1) - self.widget_7 = QtGui.QWidget(self.groupBox_5) + self.widget_7 = QtWidgets.QWidget(self.groupBox_5) self.widget_7.setMinimumSize(QtCore.QSize(0, 0)) - self.widget_7.setObjectName(_fromUtf8("widget_7")) - self.horizontalLayout_89 = QtGui.QHBoxLayout(self.widget_7) - self.horizontalLayout_89.setMargin(0) + self.widget_7.setObjectName("widget_7") + self.horizontalLayout_89 = QtWidgets.QHBoxLayout(self.widget_7) + self.horizontalLayout_89.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_89.setSpacing(3) - self.horizontalLayout_89.setObjectName(_fromUtf8("horizontalLayout_89")) - self.uil_posX = QtGui.QDoubleSpinBox(self.widget_7) + self.horizontalLayout_89.setObjectName("horizontalLayout_89") + self.uil_posX = QtWidgets.QDoubleSpinBox(self.widget_7) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -709,9 +699,9 @@ def setupUi(self, MainWindow): self.uil_posX.setDecimals(1) self.uil_posX.setMaximum(1000.0) self.uil_posX.setProperty("value", 10.0) - self.uil_posX.setObjectName(_fromUtf8("uil_posX")) + self.uil_posX.setObjectName("uil_posX") self.horizontalLayout_89.addWidget(self.uil_posX) - self.uil_posY = QtGui.QDoubleSpinBox(self.widget_7) + self.uil_posY = QtWidgets.QDoubleSpinBox(self.widget_7) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -719,9 +709,9 @@ def setupUi(self, MainWindow): self.uil_posY.setDecimals(1) self.uil_posY.setMaximum(1000.0) self.uil_posY.setProperty("value", 10.0) - self.uil_posY.setObjectName(_fromUtf8("uil_posY")) + self.uil_posY.setObjectName("uil_posY") self.horizontalLayout_89.addWidget(self.uil_posY) - self.uil_posZ = QtGui.QDoubleSpinBox(self.widget_7) + self.uil_posZ = QtWidgets.QDoubleSpinBox(self.widget_7) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -729,10 +719,10 @@ def setupUi(self, MainWindow): self.uil_posZ.setDecimals(1) self.uil_posZ.setMaximum(1000.0) self.uil_posZ.setProperty("value", 10.0) - self.uil_posZ.setObjectName(_fromUtf8("uil_posZ")) + self.uil_posZ.setObjectName("uil_posZ") self.horizontalLayout_89.addWidget(self.uil_posZ) self.gridLayout_13.addWidget(self.widget_7, 1, 2, 1, 4) - self.uil_colB = QtGui.QDoubleSpinBox(self.groupBox_5) + self.uil_colB = QtWidgets.QDoubleSpinBox(self.groupBox_5) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -741,9 +731,9 @@ def setupUi(self, MainWindow): self.uil_colB.setMaximum(1.0) self.uil_colB.setSingleStep(0.1) self.uil_colB.setProperty("value", 1.0) - self.uil_colB.setObjectName(_fromUtf8("uil_colB")) + self.uil_colB.setObjectName("uil_colB") self.gridLayout_13.addWidget(self.uil_colB, 3, 4, 1, 1) - self.uil_colA = QtGui.QDoubleSpinBox(self.groupBox_5) + self.uil_colA = QtWidgets.QDoubleSpinBox(self.groupBox_5) font = QtGui.QFont() font.setBold(False) font.setWeight(50) @@ -752,873 +742,877 @@ def setupUi(self, MainWindow): self.uil_colA.setMaximum(1.0) self.uil_colA.setSingleStep(0.1) self.uil_colA.setProperty("value", 1.0) - self.uil_colA.setObjectName(_fromUtf8("uil_colA")) + self.uil_colA.setObjectName("uil_colA") self.gridLayout_13.addWidget(self.uil_colA, 3, 5, 1, 1) - self.line_33 = QtGui.QFrame(self.groupBox_5) + self.line_33 = QtWidgets.QFrame(self.groupBox_5) self.line_33.setMinimumSize(QtCore.QSize(10, 0)) - self.line_33.setFrameShape(QtGui.QFrame.VLine) - self.line_33.setFrameShadow(QtGui.QFrame.Sunken) - self.line_33.setObjectName(_fromUtf8("line_33")) + self.line_33.setFrameShape(QtWidgets.QFrame.VLine) + self.line_33.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_33.setObjectName("line_33") self.gridLayout_13.addWidget(self.line_33, 1, 1, 1, 1) - self.line_34 = QtGui.QFrame(self.groupBox_5) + self.line_34 = QtWidgets.QFrame(self.groupBox_5) self.line_34.setMinimumSize(QtCore.QSize(10, 0)) - self.line_34.setFrameShape(QtGui.QFrame.VLine) - self.line_34.setFrameShadow(QtGui.QFrame.Sunken) - self.line_34.setObjectName(_fromUtf8("line_34")) + self.line_34.setFrameShape(QtWidgets.QFrame.VLine) + self.line_34.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_34.setObjectName("line_34") self.gridLayout_13.addWidget(self.line_34, 2, 1, 1, 1) - self.line_36 = QtGui.QFrame(self.groupBox_5) + self.line_36 = QtWidgets.QFrame(self.groupBox_5) self.line_36.setMinimumSize(QtCore.QSize(10, 0)) - self.line_36.setFrameShape(QtGui.QFrame.VLine) - self.line_36.setFrameShadow(QtGui.QFrame.Sunken) - self.line_36.setObjectName(_fromUtf8("line_36")) + self.line_36.setFrameShape(QtWidgets.QFrame.VLine) + self.line_36.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_36.setObjectName("line_36") self.gridLayout_13.addWidget(self.line_36, 4, 1, 2, 1) self.verticalLayout_2.addLayout(self.gridLayout_13) - spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem11) self.verticalLayout_15.addWidget(self.groupBox_5) - self.toolBox_3.addItem(self.page_3, _fromUtf8("")) + self.toolBox_3.addItem(self.page_3, "") self.verticalLayout.addWidget(self.toolBox_3) - self.QuickSettings.addTab(self.q_UI, _fromUtf8("")) - self.q_MNI = QtGui.QWidget() - self.q_MNI.setObjectName(_fromUtf8("q_MNI")) - self.verticalLayout_5 = QtGui.QVBoxLayout(self.q_MNI) - self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5")) - self.horizontalLayout_9 = QtGui.QHBoxLayout() + self.QuickSettings.addTab(self.q_UI, "") + self.q_MNI = QtWidgets.QWidget() + self.q_MNI.setObjectName("q_MNI") + self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.q_MNI) + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.horizontalLayout_9 = QtWidgets.QHBoxLayout() self.horizontalLayout_9.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_9.setObjectName(_fromUtf8("horizontalLayout_9")) - spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_9.setObjectName("horizontalLayout_9") + spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_9.addItem(spacerItem12) - self.show_MNI = QtGui.QCheckBox(self.q_MNI) + self.show_MNI = QtWidgets.QCheckBox(self.q_MNI) self.show_MNI.setChecked(True) - self.show_MNI.setObjectName(_fromUtf8("show_MNI")) + self.show_MNI.setObjectName("show_MNI") self.horizontalLayout_9.addWidget(self.show_MNI) - spacerItem13 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_9.addItem(spacerItem13) self.verticalLayout_5.addLayout(self.horizontalLayout_9) - self.scrollArea = QtGui.QScrollArea(self.q_MNI) - self.scrollArea.setFrameShape(QtGui.QFrame.NoFrame) + self.scrollArea = QtWidgets.QScrollArea(self.q_MNI) + self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea.setWidgetResizable(True) - self.scrollArea.setObjectName(_fromUtf8("scrollArea")) - self.scrollAreaWidgetContents = QtGui.QWidget() + self.scrollArea.setObjectName("scrollArea") + self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 307, 177)) - self.scrollAreaWidgetContents.setObjectName(_fromUtf8("scrollAreaWidgetContents")) - self.verticalLayout_48 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) - self.verticalLayout_48.setObjectName(_fromUtf8("verticalLayout_48")) - self.toolBox_2 = QtGui.QGroupBox(self.scrollAreaWidgetContents) - self.toolBox_2.setObjectName(_fromUtf8("toolBox_2")) - self.verticalLayout_49 = QtGui.QVBoxLayout(self.toolBox_2) + self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") + self.verticalLayout_48 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents) + self.verticalLayout_48.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_48.setObjectName("verticalLayout_48") + self.toolBox_2 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) + self.toolBox_2.setObjectName("toolBox_2") + self.verticalLayout_49 = QtWidgets.QVBoxLayout(self.toolBox_2) self.verticalLayout_49.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_49.setObjectName(_fromUtf8("verticalLayout_49")) - self.line_43 = QtGui.QFrame(self.toolBox_2) + self.verticalLayout_49.setObjectName("verticalLayout_49") + self.line_43 = QtWidgets.QFrame(self.toolBox_2) self.line_43.setMinimumSize(QtCore.QSize(200, 0)) - self.line_43.setFrameShape(QtGui.QFrame.HLine) - self.line_43.setFrameShadow(QtGui.QFrame.Sunken) - self.line_43.setObjectName(_fromUtf8("line_43")) + self.line_43.setFrameShape(QtWidgets.QFrame.HLine) + self.line_43.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_43.setObjectName("line_43") self.verticalLayout_49.addWidget(self.line_43) - self.gridLayout_5 = QtGui.QGridLayout() - self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) - self.label_25 = QtGui.QLabel(self.toolBox_2) + self.gridLayout_5 = QtWidgets.QGridLayout() + self.gridLayout_5.setObjectName("gridLayout_5") + self.label_25 = QtWidgets.QLabel(self.toolBox_2) font = QtGui.QFont() font.setItalic(True) self.label_25.setFont(font) - self.label_25.setObjectName(_fromUtf8("label_25")) + self.label_25.setObjectName("label_25") self.gridLayout_5.addWidget(self.label_25, 1, 0, 1, 1) - self.label_26 = QtGui.QLabel(self.toolBox_2) + self.label_26 = QtWidgets.QLabel(self.toolBox_2) font = QtGui.QFont() font.setItalic(True) self.label_26.setFont(font) - self.label_26.setObjectName(_fromUtf8("label_26")) + self.label_26.setObjectName("label_26") self.gridLayout_5.addWidget(self.label_26, 2, 0, 1, 1) - self.label_19 = QtGui.QLabel(self.toolBox_2) + self.label_19 = QtWidgets.QLabel(self.toolBox_2) font = QtGui.QFont() font.setItalic(True) self.label_19.setFont(font) - self.label_19.setObjectName(_fromUtf8("label_19")) + self.label_19.setObjectName("label_19") self.gridLayout_5.addWidget(self.label_19, 0, 0, 1, 1) - self.widget_3 = QtGui.QWidget(self.toolBox_2) - self.widget_3.setObjectName(_fromUtf8("widget_3")) - self.horizontalLayout_13 = QtGui.QHBoxLayout(self.widget_3) - self.horizontalLayout_13.setMargin(0) + self.widget_3 = QtWidgets.QWidget(self.toolBox_2) + self.widget_3.setObjectName("widget_3") + self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self.widget_3) + self.horizontalLayout_13.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_13.setSpacing(0) - self.horizontalLayout_13.setObjectName(_fromUtf8("horizontalLayout_13")) - self.gridLayout_10 = QtGui.QGridLayout() - self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10")) - self.q_internal = QtGui.QRadioButton(self.widget_3) + self.horizontalLayout_13.setObjectName("horizontalLayout_13") + self.gridLayout_10 = QtWidgets.QGridLayout() + self.gridLayout_10.setObjectName("gridLayout_10") + self.q_internal = QtWidgets.QRadioButton(self.widget_3) self.q_internal.setChecked(True) - self.q_internal.setObjectName(_fromUtf8("q_internal")) + self.q_internal.setObjectName("q_internal") self.gridLayout_10.addWidget(self.q_internal, 0, 0, 1, 1) - self.q_external = QtGui.QRadioButton(self.widget_3) - self.q_external.setObjectName(_fromUtf8("q_external")) + self.q_external = QtWidgets.QRadioButton(self.widget_3) + self.q_external.setObjectName("q_external") self.gridLayout_10.addWidget(self.q_external, 0, 1, 1, 1) self.horizontalLayout_13.addLayout(self.gridLayout_10) self.gridLayout_5.addWidget(self.widget_3, 1, 2, 1, 3) - self.uiSwitchTemplate = QtGui.QComboBox(self.toolBox_2) - self.uiSwitchTemplate.setObjectName(_fromUtf8("uiSwitchTemplate")) - self.uiSwitchTemplate.addItem(_fromUtf8("")) - self.uiSwitchTemplate.addItem(_fromUtf8("")) - self.uiSwitchTemplate.addItem(_fromUtf8("")) + self.uiSwitchTemplate = QtWidgets.QComboBox(self.toolBox_2) + self.uiSwitchTemplate.setObjectName("uiSwitchTemplate") + self.uiSwitchTemplate.addItem("") + self.uiSwitchTemplate.addItem("") + self.uiSwitchTemplate.addItem("") self.gridLayout_5.addWidget(self.uiSwitchTemplate, 2, 2, 1, 1) - self.widget_2 = QtGui.QWidget(self.toolBox_2) + self.widget_2 = QtWidgets.QWidget(self.toolBox_2) self.widget_2.setMinimumSize(QtCore.QSize(0, 0)) - self.widget_2.setObjectName(_fromUtf8("widget_2")) - self.horizontalLayout_12 = QtGui.QHBoxLayout(self.widget_2) - self.horizontalLayout_12.setMargin(0) + self.widget_2.setObjectName("widget_2") + self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self.widget_2) + self.horizontalLayout_12.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_12.setSpacing(0) - self.horizontalLayout_12.setObjectName(_fromUtf8("horizontalLayout_12")) - self.gridLayout_9 = QtGui.QGridLayout() - self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9")) - self.Lhemi_only = QtGui.QRadioButton(self.widget_2) - self.Lhemi_only.setObjectName(_fromUtf8("Lhemi_only")) + self.horizontalLayout_12.setObjectName("horizontalLayout_12") + self.gridLayout_9 = QtWidgets.QGridLayout() + self.gridLayout_9.setObjectName("gridLayout_9") + self.Lhemi_only = QtWidgets.QRadioButton(self.widget_2) + self.Lhemi_only.setObjectName("Lhemi_only") self.gridLayout_9.addWidget(self.Lhemi_only, 0, 0, 1, 1) - self.Both_only = QtGui.QRadioButton(self.widget_2) + self.Both_only = QtWidgets.QRadioButton(self.widget_2) self.Both_only.setChecked(True) - self.Both_only.setObjectName(_fromUtf8("Both_only")) + self.Both_only.setObjectName("Both_only") self.gridLayout_9.addWidget(self.Both_only, 0, 1, 1, 1) - self.Rhemi_only = QtGui.QRadioButton(self.widget_2) - self.Rhemi_only.setObjectName(_fromUtf8("Rhemi_only")) + self.Rhemi_only = QtWidgets.QRadioButton(self.widget_2) + self.Rhemi_only.setObjectName("Rhemi_only") self.gridLayout_9.addWidget(self.Rhemi_only, 0, 2, 1, 1) self.horizontalLayout_12.addLayout(self.gridLayout_9) self.gridLayout_5.addWidget(self.widget_2, 0, 2, 1, 3) - self.line_29 = QtGui.QFrame(self.toolBox_2) + self.line_29 = QtWidgets.QFrame(self.toolBox_2) self.line_29.setMinimumSize(QtCore.QSize(20, 0)) - self.line_29.setFrameShape(QtGui.QFrame.VLine) - self.line_29.setFrameShadow(QtGui.QFrame.Sunken) - self.line_29.setObjectName(_fromUtf8("line_29")) + self.line_29.setFrameShape(QtWidgets.QFrame.VLine) + self.line_29.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_29.setObjectName("line_29") self.gridLayout_5.addWidget(self.line_29, 2, 1, 1, 1) - self.line_28 = QtGui.QFrame(self.toolBox_2) + self.line_28 = QtWidgets.QFrame(self.toolBox_2) self.line_28.setMinimumSize(QtCore.QSize(20, 0)) - self.line_28.setFrameShape(QtGui.QFrame.VLine) - self.line_28.setFrameShadow(QtGui.QFrame.Sunken) - self.line_28.setObjectName(_fromUtf8("line_28")) + self.line_28.setFrameShape(QtWidgets.QFrame.VLine) + self.line_28.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_28.setObjectName("line_28") self.gridLayout_5.addWidget(self.line_28, 1, 1, 1, 1) - self.line_27 = QtGui.QFrame(self.toolBox_2) + self.line_27 = QtWidgets.QFrame(self.toolBox_2) self.line_27.setMinimumSize(QtCore.QSize(20, 0)) - self.line_27.setFrameShape(QtGui.QFrame.VLine) - self.line_27.setFrameShadow(QtGui.QFrame.Sunken) - self.line_27.setObjectName(_fromUtf8("line_27")) + self.line_27.setFrameShape(QtWidgets.QFrame.VLine) + self.line_27.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_27.setObjectName("line_27") self.gridLayout_5.addWidget(self.line_27, 0, 1, 1, 1) - spacerItem14 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem14 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem14, 3, 2, 1, 3) self.verticalLayout_49.addLayout(self.gridLayout_5) - spacerItem15 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem15 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_49.addItem(spacerItem15) self.verticalLayout_48.addWidget(self.toolBox_2) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout_5.addWidget(self.scrollArea) - self.QuickSettings.addTab(self.q_MNI, _fromUtf8("")) - self.q_SOURCES = QtGui.QWidget() - self.q_SOURCES.setObjectName(_fromUtf8("q_SOURCES")) - self.verticalLayout_3 = QtGui.QVBoxLayout(self.q_SOURCES) - self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) - self.horizontalLayout_16 = QtGui.QHBoxLayout() + self.QuickSettings.addTab(self.q_MNI, "") + self.q_SOURCES = QtWidgets.QWidget() + self.q_SOURCES.setObjectName("q_SOURCES") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.q_SOURCES) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.horizontalLayout_16 = QtWidgets.QHBoxLayout() self.horizontalLayout_16.setContentsMargins(0, 0, -1, 0) - self.horizontalLayout_16.setObjectName(_fromUtf8("horizontalLayout_16")) - spacerItem16 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_16.setObjectName("horizontalLayout_16") + spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_16.addItem(spacerItem16) - self.show_Sources = QtGui.QCheckBox(self.q_SOURCES) + self.show_Sources = QtWidgets.QCheckBox(self.q_SOURCES) self.show_Sources.setChecked(True) - self.show_Sources.setObjectName(_fromUtf8("show_Sources")) + self.show_Sources.setObjectName("show_Sources") self.horizontalLayout_16.addWidget(self.show_Sources) - self.q_stextshow = QtGui.QCheckBox(self.q_SOURCES) - self.q_stextshow.setObjectName(_fromUtf8("q_stextshow")) + self.q_stextshow = QtWidgets.QCheckBox(self.q_SOURCES) + self.q_stextshow.setObjectName("q_stextshow") self.horizontalLayout_16.addWidget(self.q_stextshow) - spacerItem17 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem17 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_16.addItem(spacerItem17) self.verticalLayout_3.addLayout(self.horizontalLayout_16) - self.scrollArea_2 = QtGui.QScrollArea(self.q_SOURCES) - self.scrollArea_2.setFrameShape(QtGui.QFrame.NoFrame) + self.scrollArea_2 = QtWidgets.QScrollArea(self.q_SOURCES) + self.scrollArea_2.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea_2.setWidgetResizable(True) - self.scrollArea_2.setObjectName(_fromUtf8("scrollArea_2")) - self.scrollAreaWidgetContents_2 = QtGui.QWidget() + self.scrollArea_2.setObjectName("scrollArea_2") + self.scrollAreaWidgetContents_2 = QtWidgets.QWidget() self.scrollAreaWidgetContents_2.setGeometry(QtCore.QRect(0, 0, 335, 684)) - self.scrollAreaWidgetContents_2.setObjectName(_fromUtf8("scrollAreaWidgetContents_2")) - self.verticalLayout_12 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_2) - self.verticalLayout_12.setObjectName(_fromUtf8("verticalLayout_12")) - self.toolBox = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.toolBox.setObjectName(_fromUtf8("toolBox")) - self.verticalLayout_35 = QtGui.QVBoxLayout(self.toolBox) + self.scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2") + self.verticalLayout_12 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_2) + self.verticalLayout_12.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_12.setObjectName("verticalLayout_12") + self.toolBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.toolBox.setObjectName("toolBox") + self.verticalLayout_35 = QtWidgets.QVBoxLayout(self.toolBox) self.verticalLayout_35.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_35.setObjectName(_fromUtf8("verticalLayout_35")) - self.line_20 = QtGui.QFrame(self.toolBox) + self.verticalLayout_35.setObjectName("verticalLayout_35") + self.line_20 = QtWidgets.QFrame(self.toolBox) self.line_20.setMinimumSize(QtCore.QSize(200, 0)) - self.line_20.setFrameShape(QtGui.QFrame.HLine) - self.line_20.setFrameShadow(QtGui.QFrame.Sunken) - self.line_20.setObjectName(_fromUtf8("line_20")) + self.line_20.setFrameShape(QtWidgets.QFrame.HLine) + self.line_20.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_20.setObjectName("line_20") self.verticalLayout_35.addWidget(self.line_20) - self.gridLayout_6 = QtGui.QGridLayout() - self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6")) - self.s_EdgeWidth = QtGui.QDoubleSpinBox(self.toolBox) + self.gridLayout_6 = QtWidgets.QGridLayout() + self.gridLayout_6.setObjectName("gridLayout_6") + self.s_EdgeWidth = QtWidgets.QDoubleSpinBox(self.toolBox) self.s_EdgeWidth.setDecimals(1) - self.s_EdgeWidth.setObjectName(_fromUtf8("s_EdgeWidth")) + self.s_EdgeWidth.setObjectName("s_EdgeWidth") self.gridLayout_6.addWidget(self.s_EdgeWidth, 5, 3, 1, 2) - self.s_uiNone = QtGui.QRadioButton(self.toolBox) - self.s_uiNone.setObjectName(_fromUtf8("s_uiNone")) + self.s_uiNone = QtWidgets.QRadioButton(self.toolBox) + self.s_uiNone.setObjectName("s_uiNone") self.gridLayout_6.addWidget(self.s_uiNone, 1, 2, 1, 1) - self.label_32 = QtGui.QLabel(self.toolBox) + self.label_32 = QtWidgets.QLabel(self.toolBox) font = QtGui.QFont() font.setItalic(True) self.label_32.setFont(font) - self.label_32.setObjectName(_fromUtf8("label_32")) + self.label_32.setObjectName("label_32") self.gridLayout_6.addWidget(self.label_32, 3, 0, 1, 1) - self.label_28 = QtGui.QLabel(self.toolBox) + self.label_28 = QtWidgets.QLabel(self.toolBox) font = QtGui.QFont() font.setItalic(True) self.label_28.setFont(font) - self.label_28.setObjectName(_fromUtf8("label_28")) + self.label_28.setObjectName("label_28") self.gridLayout_6.addWidget(self.label_28, 2, 0, 1, 1) - self.s_LeftH = QtGui.QRadioButton(self.toolBox) + self.s_LeftH = QtWidgets.QRadioButton(self.toolBox) self.s_LeftH.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.s_LeftH.setAutoExclusive(True) - self.s_LeftH.setObjectName(_fromUtf8("s_LeftH")) + self.s_LeftH.setObjectName("s_LeftH") self.gridLayout_6.addWidget(self.s_LeftH, 0, 3, 1, 1) - self.s_RightH = QtGui.QRadioButton(self.toolBox) - self.s_RightH.setObjectName(_fromUtf8("s_RightH")) + self.s_RightH = QtWidgets.QRadioButton(self.toolBox) + self.s_RightH.setObjectName("s_RightH") self.gridLayout_6.addWidget(self.s_RightH, 1, 3, 1, 1) - self.s_uiAll = QtGui.QRadioButton(self.toolBox) + self.s_uiAll = QtWidgets.QRadioButton(self.toolBox) self.s_uiAll.setChecked(True) - self.s_uiAll.setObjectName(_fromUtf8("s_uiAll")) + self.s_uiAll.setObjectName("s_uiAll") self.gridLayout_6.addWidget(self.s_uiAll, 0, 2, 1, 1) - self.s_Outside = QtGui.QRadioButton(self.toolBox) - self.s_Outside.setObjectName(_fromUtf8("s_Outside")) + self.s_Outside = QtWidgets.QRadioButton(self.toolBox) + self.s_Outside.setObjectName("s_Outside") self.gridLayout_6.addWidget(self.s_Outside, 1, 4, 1, 1) - self.label_27 = QtGui.QLabel(self.toolBox) + self.label_27 = QtWidgets.QLabel(self.toolBox) font = QtGui.QFont() font.setItalic(True) self.label_27.setFont(font) - self.label_27.setObjectName(_fromUtf8("label_27")) + self.label_27.setObjectName("label_27") self.gridLayout_6.addWidget(self.label_27, 0, 0, 2, 1) - self.s_Inside = QtGui.QRadioButton(self.toolBox) - self.s_Inside.setObjectName(_fromUtf8("s_Inside")) + self.s_Inside = QtWidgets.QRadioButton(self.toolBox) + self.s_Inside.setObjectName("s_Inside") self.gridLayout_6.addWidget(self.s_Inside, 0, 4, 1, 1) - self.s_Symbol = QtGui.QComboBox(self.toolBox) - self.s_Symbol.setObjectName(_fromUtf8("s_Symbol")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) - self.s_Symbol.addItem(_fromUtf8("")) + self.s_Symbol = QtWidgets.QComboBox(self.toolBox) + self.s_Symbol.setObjectName("s_Symbol") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") + self.s_Symbol.addItem("") self.gridLayout_6.addWidget(self.s_Symbol, 2, 2, 1, 3) - self.label_20 = QtGui.QLabel(self.toolBox) - self.label_20.setObjectName(_fromUtf8("label_20")) + self.label_20 = QtWidgets.QLabel(self.toolBox) + self.label_20.setObjectName("label_20") self.gridLayout_6.addWidget(self.label_20, 5, 2, 1, 1) - self.s_EdgeColor = QtGui.QLineEdit(self.toolBox) - self.s_EdgeColor.setObjectName(_fromUtf8("s_EdgeColor")) + self.s_EdgeColor = QtWidgets.QLineEdit(self.toolBox) + self.s_EdgeColor.setObjectName("s_EdgeColor") self.gridLayout_6.addWidget(self.s_EdgeColor, 4, 3, 1, 2) - self.label_17 = QtGui.QLabel(self.toolBox) - self.label_17.setObjectName(_fromUtf8("label_17")) + self.label_17 = QtWidgets.QLabel(self.toolBox) + self.label_17.setObjectName("label_17") self.gridLayout_6.addWidget(self.label_17, 4, 2, 1, 1) - self.label_31 = QtGui.QLabel(self.toolBox) + self.label_31 = QtWidgets.QLabel(self.toolBox) font = QtGui.QFont() font.setItalic(True) self.label_31.setFont(font) - self.label_31.setObjectName(_fromUtf8("label_31")) + self.label_31.setObjectName("label_31") self.gridLayout_6.addWidget(self.label_31, 4, 0, 2, 1) - self.widget_9 = QtGui.QWidget(self.toolBox) - self.widget_9.setObjectName(_fromUtf8("widget_9")) - self.horizontalLayout_91 = QtGui.QHBoxLayout(self.widget_9) - self.horizontalLayout_91.setMargin(0) + self.widget_9 = QtWidgets.QWidget(self.toolBox) + self.widget_9.setObjectName("widget_9") + self.horizontalLayout_91 = QtWidgets.QHBoxLayout(self.widget_9) + self.horizontalLayout_91.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_91.setSpacing(3) - self.horizontalLayout_91.setObjectName(_fromUtf8("horizontalLayout_91")) - self.s_radiusMin = QtGui.QDoubleSpinBox(self.widget_9) - self.s_radiusMin.setObjectName(_fromUtf8("s_radiusMin")) + self.horizontalLayout_91.setObjectName("horizontalLayout_91") + self.s_radiusMin = QtWidgets.QDoubleSpinBox(self.widget_9) + self.s_radiusMin.setObjectName("s_radiusMin") self.horizontalLayout_91.addWidget(self.s_radiusMin) - self.s_radiusMax = QtGui.QDoubleSpinBox(self.widget_9) - self.s_radiusMax.setObjectName(_fromUtf8("s_radiusMax")) + self.s_radiusMax = QtWidgets.QDoubleSpinBox(self.widget_9) + self.s_radiusMax.setObjectName("s_radiusMax") self.horizontalLayout_91.addWidget(self.s_radiusMax) self.gridLayout_6.addWidget(self.widget_9, 3, 2, 1, 3) - self.line_24 = QtGui.QFrame(self.toolBox) + self.line_24 = QtWidgets.QFrame(self.toolBox) self.line_24.setMinimumSize(QtCore.QSize(20, 0)) - self.line_24.setFrameShape(QtGui.QFrame.VLine) - self.line_24.setFrameShadow(QtGui.QFrame.Sunken) - self.line_24.setObjectName(_fromUtf8("line_24")) + self.line_24.setFrameShape(QtWidgets.QFrame.VLine) + self.line_24.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_24.setObjectName("line_24") self.gridLayout_6.addWidget(self.line_24, 3, 1, 1, 1) - self.line_23 = QtGui.QFrame(self.toolBox) + self.line_23 = QtWidgets.QFrame(self.toolBox) self.line_23.setMinimumSize(QtCore.QSize(20, 0)) - self.line_23.setFrameShape(QtGui.QFrame.VLine) - self.line_23.setFrameShadow(QtGui.QFrame.Sunken) - self.line_23.setObjectName(_fromUtf8("line_23")) + self.line_23.setFrameShape(QtWidgets.QFrame.VLine) + self.line_23.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_23.setObjectName("line_23") self.gridLayout_6.addWidget(self.line_23, 4, 1, 2, 1) - self.line_22 = QtGui.QFrame(self.toolBox) + self.line_22 = QtWidgets.QFrame(self.toolBox) self.line_22.setMinimumSize(QtCore.QSize(20, 0)) - self.line_22.setFrameShape(QtGui.QFrame.VLine) - self.line_22.setFrameShadow(QtGui.QFrame.Sunken) - self.line_22.setObjectName(_fromUtf8("line_22")) + self.line_22.setFrameShape(QtWidgets.QFrame.VLine) + self.line_22.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_22.setObjectName("line_22") self.gridLayout_6.addWidget(self.line_22, 0, 1, 2, 1) - self.line_25 = QtGui.QFrame(self.toolBox) + self.line_25 = QtWidgets.QFrame(self.toolBox) self.line_25.setMinimumSize(QtCore.QSize(20, 0)) - self.line_25.setFrameShape(QtGui.QFrame.VLine) - self.line_25.setFrameShadow(QtGui.QFrame.Sunken) - self.line_25.setObjectName(_fromUtf8("line_25")) + self.line_25.setFrameShape(QtWidgets.QFrame.VLine) + self.line_25.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_25.setObjectName("line_25") self.gridLayout_6.addWidget(self.line_25, 2, 1, 1, 1) - self.line_51 = QtGui.QFrame(self.toolBox) + self.line_51 = QtWidgets.QFrame(self.toolBox) self.line_51.setMinimumSize(QtCore.QSize(20, 0)) - self.line_51.setFrameShape(QtGui.QFrame.VLine) - self.line_51.setFrameShadow(QtGui.QFrame.Sunken) - self.line_51.setObjectName(_fromUtf8("line_51")) + self.line_51.setFrameShape(QtWidgets.QFrame.VLine) + self.line_51.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_51.setObjectName("line_51") self.gridLayout_6.addWidget(self.line_51, 6, 1, 1, 1) - self.label_114 = QtGui.QLabel(self.toolBox) + self.label_114 = QtWidgets.QLabel(self.toolBox) font = QtGui.QFont() font.setItalic(True) self.label_114.setFont(font) - self.label_114.setObjectName(_fromUtf8("label_114")) + self.label_114.setObjectName("label_114") self.gridLayout_6.addWidget(self.label_114, 6, 0, 1, 1) - self.s_Scaling = QtGui.QCheckBox(self.toolBox) + self.s_Scaling = QtWidgets.QCheckBox(self.toolBox) font = QtGui.QFont() font.setItalic(True) self.s_Scaling.setFont(font) - self.s_Scaling.setObjectName(_fromUtf8("s_Scaling")) + self.s_Scaling.setObjectName("s_Scaling") self.gridLayout_6.addWidget(self.s_Scaling, 6, 2, 1, 3) - spacerItem18 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem18 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem18, 7, 2, 1, 3) self.verticalLayout_35.addLayout(self.gridLayout_6) self.verticalLayout_12.addWidget(self.toolBox) - spacerItem19 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem19 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.verticalLayout_12.addItem(spacerItem19) - self.grpText = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) + self.grpText = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) self.grpText.setEnabled(True) - self.grpText.setObjectName(_fromUtf8("grpText")) - self.verticalLayout_6 = QtGui.QVBoxLayout(self.grpText) + self.grpText.setObjectName("grpText") + self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.grpText) self.verticalLayout_6.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_6.setObjectName(_fromUtf8("verticalLayout_6")) - self.line_39 = QtGui.QFrame(self.grpText) + self.verticalLayout_6.setObjectName("verticalLayout_6") + self.line_39 = QtWidgets.QFrame(self.grpText) self.line_39.setMinimumSize(QtCore.QSize(200, 0)) - self.line_39.setFrameShape(QtGui.QFrame.HLine) - self.line_39.setFrameShadow(QtGui.QFrame.Sunken) - self.line_39.setObjectName(_fromUtf8("line_39")) + self.line_39.setFrameShape(QtWidgets.QFrame.HLine) + self.line_39.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_39.setObjectName("line_39") self.verticalLayout_6.addWidget(self.line_39) - self.gridLayout_7 = QtGui.QGridLayout() - self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7")) - self.label_12 = QtGui.QLabel(self.grpText) - self.label_12.setObjectName(_fromUtf8("label_12")) + self.gridLayout_7 = QtWidgets.QGridLayout() + self.gridLayout_7.setObjectName("gridLayout_7") + self.label_12 = QtWidgets.QLabel(self.grpText) + self.label_12.setObjectName("label_12") self.gridLayout_7.addWidget(self.label_12, 1, 2, 1, 1) - self.label_29 = QtGui.QLabel(self.grpText) + self.label_29 = QtWidgets.QLabel(self.grpText) font = QtGui.QFont() font.setItalic(True) self.label_29.setFont(font) self.label_29.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) - self.label_29.setObjectName(_fromUtf8("label_29")) + self.label_29.setObjectName("label_29") self.gridLayout_7.addWidget(self.label_29, 0, 0, 3, 1) - self.q_stextcolor = QtGui.QLineEdit(self.grpText) - self.q_stextcolor.setObjectName(_fromUtf8("q_stextcolor")) + self.q_stextcolor = QtWidgets.QLineEdit(self.grpText) + self.q_stextcolor.setObjectName("q_stextcolor") self.gridLayout_7.addWidget(self.q_stextcolor, 2, 3, 1, 2) - self.y_text = QtGui.QDoubleSpinBox(self.grpText) + self.y_text = QtWidgets.QDoubleSpinBox(self.grpText) self.y_text.setMinimum(-100.0) self.y_text.setMaximum(100.0) - self.y_text.setObjectName(_fromUtf8("y_text")) + self.y_text.setObjectName("y_text") self.gridLayout_7.addWidget(self.y_text, 3, 3, 1, 1) - self.label_14 = QtGui.QLabel(self.grpText) - self.label_14.setObjectName(_fromUtf8("label_14")) + self.label_14 = QtWidgets.QLabel(self.grpText) + self.label_14.setObjectName("label_14") self.gridLayout_7.addWidget(self.label_14, 2, 2, 1, 1) - self.x_text = QtGui.QDoubleSpinBox(self.grpText) + self.x_text = QtWidgets.QDoubleSpinBox(self.grpText) self.x_text.setMinimum(-100.0) self.x_text.setMaximum(100.0) - self.x_text.setObjectName(_fromUtf8("x_text")) + self.x_text.setObjectName("x_text") self.gridLayout_7.addWidget(self.x_text, 3, 2, 1, 1) - self.z_text = QtGui.QDoubleSpinBox(self.grpText) + self.z_text = QtWidgets.QDoubleSpinBox(self.grpText) self.z_text.setMinimum(-100.0) self.z_text.setMaximum(100.0) - self.z_text.setObjectName(_fromUtf8("z_text")) + self.z_text.setObjectName("z_text") self.gridLayout_7.addWidget(self.z_text, 3, 4, 1, 1) - self.label_30 = QtGui.QLabel(self.grpText) + self.label_30 = QtWidgets.QLabel(self.grpText) font = QtGui.QFont() font.setItalic(True) self.label_30.setFont(font) - self.label_30.setObjectName(_fromUtf8("label_30")) + self.label_30.setObjectName("label_30") self.gridLayout_7.addWidget(self.label_30, 3, 0, 1, 1) - self.line_37 = QtGui.QFrame(self.grpText) + self.line_37 = QtWidgets.QFrame(self.grpText) self.line_37.setMinimumSize(QtCore.QSize(20, 0)) - self.line_37.setFrameShape(QtGui.QFrame.VLine) - self.line_37.setFrameShadow(QtGui.QFrame.Sunken) - self.line_37.setObjectName(_fromUtf8("line_37")) + self.line_37.setFrameShape(QtWidgets.QFrame.VLine) + self.line_37.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_37.setObjectName("line_37") self.gridLayout_7.addWidget(self.line_37, 0, 1, 3, 1) - self.line_38 = QtGui.QFrame(self.grpText) + self.line_38 = QtWidgets.QFrame(self.grpText) self.line_38.setMinimumSize(QtCore.QSize(20, 0)) - self.line_38.setFrameShape(QtGui.QFrame.VLine) - self.line_38.setFrameShadow(QtGui.QFrame.Sunken) - self.line_38.setObjectName(_fromUtf8("line_38")) + self.line_38.setFrameShape(QtWidgets.QFrame.VLine) + self.line_38.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_38.setObjectName("line_38") self.gridLayout_7.addWidget(self.line_38, 3, 1, 1, 1) - spacerItem20 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem20 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_7.addItem(spacerItem20, 4, 2, 1, 3) - self.q_stextsize = QtGui.QDoubleSpinBox(self.grpText) - self.q_stextsize.setObjectName(_fromUtf8("q_stextsize")) + self.q_stextsize = QtWidgets.QDoubleSpinBox(self.grpText) + self.q_stextsize.setObjectName("q_stextsize") self.gridLayout_7.addWidget(self.q_stextsize, 1, 3, 1, 2) self.verticalLayout_6.addLayout(self.gridLayout_7) self.verticalLayout_12.addWidget(self.grpText) - spacerItem21 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem21 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.verticalLayout_12.addItem(spacerItem21) - self.groupBox_6 = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.groupBox_6.setObjectName(_fromUtf8("groupBox_6")) - self.verticalLayout_7 = QtGui.QVBoxLayout(self.groupBox_6) + self.groupBox_6 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.groupBox_6.setObjectName("groupBox_6") + self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.groupBox_6) self.verticalLayout_7.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_7.setObjectName(_fromUtf8("verticalLayout_7")) - self.line_40 = QtGui.QFrame(self.groupBox_6) + self.verticalLayout_7.setObjectName("verticalLayout_7") + self.line_40 = QtWidgets.QFrame(self.groupBox_6) self.line_40.setMinimumSize(QtCore.QSize(200, 0)) - self.line_40.setFrameShape(QtGui.QFrame.HLine) - self.line_40.setFrameShadow(QtGui.QFrame.Sunken) - self.line_40.setObjectName(_fromUtf8("line_40")) + self.line_40.setFrameShape(QtWidgets.QFrame.HLine) + self.line_40.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_40.setObjectName("line_40") self.verticalLayout_7.addWidget(self.line_40) - self.gridLayout_8 = QtGui.QGridLayout() + self.gridLayout_8 = QtWidgets.QGridLayout() self.gridLayout_8.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8")) - self.label_15 = QtGui.QLabel(self.groupBox_6) + self.gridLayout_8.setObjectName("gridLayout_8") + self.label_15 = QtWidgets.QLabel(self.groupBox_6) font = QtGui.QFont() font.setItalic(True) self.label_15.setFont(font) - self.label_15.setObjectName(_fromUtf8("label_15")) + self.label_15.setObjectName("label_15") self.gridLayout_8.addWidget(self.label_15, 0, 0, 1, 1) - self._uitRadius = QtGui.QDoubleSpinBox(self.groupBox_6) + self._uitRadius = QtWidgets.QDoubleSpinBox(self.groupBox_6) self._uitRadius.setDecimals(1) - self._uitRadius.setObjectName(_fromUtf8("_uitRadius")) + self._uitRadius.setObjectName("_uitRadius") self.gridLayout_8.addWidget(self._uitRadius, 0, 2, 1, 1) - self.line_52 = QtGui.QFrame(self.groupBox_6) + self.line_52 = QtWidgets.QFrame(self.groupBox_6) self.line_52.setMinimumSize(QtCore.QSize(20, 0)) - self.line_52.setFrameShape(QtGui.QFrame.VLine) - self.line_52.setFrameShadow(QtGui.QFrame.Sunken) - self.line_52.setObjectName(_fromUtf8("line_52")) + self.line_52.setFrameShape(QtWidgets.QFrame.VLine) + self.line_52.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_52.setObjectName("line_52") self.gridLayout_8.addWidget(self.line_52, 0, 1, 1, 1) - self.line_53 = QtGui.QFrame(self.groupBox_6) + self.line_53 = QtWidgets.QFrame(self.groupBox_6) self.line_53.setMinimumSize(QtCore.QSize(20, 0)) - self.line_53.setFrameShape(QtGui.QFrame.VLine) - self.line_53.setFrameShadow(QtGui.QFrame.Sunken) - self.line_53.setObjectName(_fromUtf8("line_53")) + self.line_53.setFrameShape(QtWidgets.QFrame.VLine) + self.line_53.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_53.setObjectName("line_53") self.gridLayout_8.addWidget(self.line_53, 1, 1, 1, 1) - self.label_115 = QtGui.QLabel(self.groupBox_6) + self.label_115 = QtWidgets.QLabel(self.groupBox_6) font = QtGui.QFont() font.setItalic(True) self.label_115.setFont(font) - self.label_115.setObjectName(_fromUtf8("label_115")) + self.label_115.setObjectName("label_115") self.gridLayout_8.addWidget(self.label_115, 1, 0, 1, 1) - self.line_54 = QtGui.QFrame(self.groupBox_6) + self.line_54 = QtWidgets.QFrame(self.groupBox_6) self.line_54.setMinimumSize(QtCore.QSize(20, 0)) - self.line_54.setFrameShape(QtGui.QFrame.VLine) - self.line_54.setFrameShadow(QtGui.QFrame.Sunken) - self.line_54.setObjectName(_fromUtf8("line_54")) + self.line_54.setFrameShape(QtWidgets.QFrame.VLine) + self.line_54.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_54.setObjectName("line_54") self.gridLayout_8.addWidget(self.line_54, 2, 1, 1, 1) - self.label_116 = QtGui.QLabel(self.groupBox_6) + self.label_116 = QtWidgets.QLabel(self.groupBox_6) font = QtGui.QFont() font.setItalic(True) self.label_116.setFont(font) - self.label_116.setObjectName(_fromUtf8("label_116")) + self.label_116.setObjectName("label_116") self.gridLayout_8.addWidget(self.label_116, 2, 0, 1, 1) - self.widget_13 = QtGui.QWidget(self.groupBox_6) - self.widget_13.setObjectName(_fromUtf8("widget_13")) - self.horizontalLayout_6 = QtGui.QHBoxLayout(self.widget_13) - self.horizontalLayout_6.setMargin(0) + self.widget_13 = QtWidgets.QWidget(self.groupBox_6) + self.widget_13.setObjectName("widget_13") + self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.widget_13) + self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_6.setSpacing(0) - self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6")) - self._uitActivity = QtGui.QRadioButton(self.widget_13) + self.horizontalLayout_6.setObjectName("horizontalLayout_6") + self._uitActivity = QtWidgets.QRadioButton(self.widget_13) self._uitActivity.setChecked(True) - self._uitActivity.setObjectName(_fromUtf8("_uitActivity")) + self._uitActivity.setObjectName("_uitActivity") self.horizontalLayout_6.addWidget(self._uitActivity) - self._uitRepartition = QtGui.QRadioButton(self.widget_13) - self._uitRepartition.setObjectName(_fromUtf8("_uitRepartition")) + self._uitRepartition = QtWidgets.QRadioButton(self.widget_13) + self._uitRepartition.setObjectName("_uitRepartition") self.horizontalLayout_6.addWidget(self._uitRepartition) self.gridLayout_8.addWidget(self.widget_13, 1, 2, 1, 1) - self._uitProjectOn = QtGui.QComboBox(self.groupBox_6) - self._uitProjectOn.setObjectName(_fromUtf8("_uitProjectOn")) - self._uitProjectOn.addItem(_fromUtf8("")) - self._uitProjectOn.addItem(_fromUtf8("")) + self._uitProjectOn = QtWidgets.QComboBox(self.groupBox_6) + self._uitProjectOn.setObjectName("_uitProjectOn") + self._uitProjectOn.addItem("") + self._uitProjectOn.addItem("") self.gridLayout_8.addWidget(self._uitProjectOn, 2, 2, 1, 1) - spacerItem22 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem22 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_8.addItem(spacerItem22, 4, 2, 1, 1) - self._uitContribute = QtGui.QCheckBox(self.groupBox_6) - self._uitContribute.setObjectName(_fromUtf8("_uitContribute")) + self._uitContribute = QtWidgets.QCheckBox(self.groupBox_6) + self._uitContribute.setObjectName("_uitContribute") self.gridLayout_8.addWidget(self._uitContribute, 3, 0, 1, 3) self.verticalLayout_7.addLayout(self.gridLayout_8) - self.horizontalLayout_8 = QtGui.QHBoxLayout() + self.horizontalLayout_8 = QtWidgets.QHBoxLayout() self.horizontalLayout_8.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_8.setObjectName(_fromUtf8("horizontalLayout_8")) - spacerItem23 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_8.setObjectName("horizontalLayout_8") + spacerItem23 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_8.addItem(spacerItem23) - self._uitApply = QtGui.QPushButton(self.groupBox_6) + self._uitApply = QtWidgets.QPushButton(self.groupBox_6) self._uitApply.setEnabled(True) - self._uitApply.setObjectName(_fromUtf8("_uitApply")) + self._uitApply.setObjectName("_uitApply") self.horizontalLayout_8.addWidget(self._uitApply) - spacerItem24 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem24 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_8.addItem(spacerItem24) self.verticalLayout_7.addLayout(self.horizontalLayout_8) self.verticalLayout_12.addWidget(self.groupBox_6) - spacerItem25 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem25 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_12.addItem(spacerItem25) self.scrollArea_2.setWidget(self.scrollAreaWidgetContents_2) self.verticalLayout_3.addWidget(self.scrollArea_2) - self.QuickSettings.addTab(self.q_SOURCES, _fromUtf8("")) - self.q_CONNECT = QtGui.QWidget() - self.q_CONNECT.setObjectName(_fromUtf8("q_CONNECT")) - self.verticalLayout_13 = QtGui.QVBoxLayout(self.q_CONNECT) - self.verticalLayout_13.setObjectName(_fromUtf8("verticalLayout_13")) - self.horizontalLayout_17 = QtGui.QHBoxLayout() - self.horizontalLayout_17.setObjectName(_fromUtf8("horizontalLayout_17")) - spacerItem26 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.QuickSettings.addTab(self.q_SOURCES, "") + self.q_CONNECT = QtWidgets.QWidget() + self.q_CONNECT.setObjectName("q_CONNECT") + self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.q_CONNECT) + self.verticalLayout_13.setObjectName("verticalLayout_13") + self.horizontalLayout_17 = QtWidgets.QHBoxLayout() + self.horizontalLayout_17.setObjectName("horizontalLayout_17") + spacerItem26 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_17.addItem(spacerItem26) - self.uiConnectShow = QtGui.QCheckBox(self.q_CONNECT) + self.uiConnectShow = QtWidgets.QCheckBox(self.q_CONNECT) self.uiConnectShow.setChecked(True) - self.uiConnectShow.setObjectName(_fromUtf8("uiConnectShow")) + self.uiConnectShow.setObjectName("uiConnectShow") self.horizontalLayout_17.addWidget(self.uiConnectShow) - spacerItem27 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem27 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_17.addItem(spacerItem27) self.verticalLayout_13.addLayout(self.horizontalLayout_17) - self.scrollArea_7 = QtGui.QScrollArea(self.q_CONNECT) - self.scrollArea_7.setFrameShape(QtGui.QFrame.NoFrame) - self.scrollArea_7.setFrameShadow(QtGui.QFrame.Sunken) + self.scrollArea_7 = QtWidgets.QScrollArea(self.q_CONNECT) + self.scrollArea_7.setFrameShape(QtWidgets.QFrame.NoFrame) + self.scrollArea_7.setFrameShadow(QtWidgets.QFrame.Sunken) self.scrollArea_7.setWidgetResizable(True) - self.scrollArea_7.setObjectName(_fromUtf8("scrollArea_7")) - self.scrollAreaWidgetContents_8 = QtGui.QWidget() + self.scrollArea_7.setObjectName("scrollArea_7") + self.scrollAreaWidgetContents_8 = QtWidgets.QWidget() self.scrollAreaWidgetContents_8.setGeometry(QtCore.QRect(0, 0, 311, 327)) - self.scrollAreaWidgetContents_8.setObjectName(_fromUtf8("scrollAreaWidgetContents_8")) - self.verticalLayout_63 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_8) - self.verticalLayout_63.setObjectName(_fromUtf8("verticalLayout_63")) - self.toolBox_5 = QtGui.QGroupBox(self.scrollAreaWidgetContents_8) - self.toolBox_5.setObjectName(_fromUtf8("toolBox_5")) - self.verticalLayout_39 = QtGui.QVBoxLayout(self.toolBox_5) + self.scrollAreaWidgetContents_8.setObjectName("scrollAreaWidgetContents_8") + self.verticalLayout_63 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_8) + self.verticalLayout_63.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_63.setObjectName("verticalLayout_63") + self.toolBox_5 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_8) + self.toolBox_5.setObjectName("toolBox_5") + self.verticalLayout_39 = QtWidgets.QVBoxLayout(self.toolBox_5) self.verticalLayout_39.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_39.setObjectName(_fromUtf8("verticalLayout_39")) - self.line_42 = QtGui.QFrame(self.toolBox_5) + self.verticalLayout_39.setObjectName("verticalLayout_39") + self.line_42 = QtWidgets.QFrame(self.toolBox_5) self.line_42.setMinimumSize(QtCore.QSize(200, 0)) - self.line_42.setFrameShape(QtGui.QFrame.HLine) - self.line_42.setFrameShadow(QtGui.QFrame.Sunken) - self.line_42.setObjectName(_fromUtf8("line_42")) + self.line_42.setFrameShape(QtWidgets.QFrame.HLine) + self.line_42.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_42.setObjectName("line_42") self.verticalLayout_39.addWidget(self.line_42) - self.gridLayout = QtGui.QGridLayout() + self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setContentsMargins(-1, 0, -1, -1) - self.gridLayout.setObjectName(_fromUtf8("gridLayout")) - self.widget = QtGui.QWidget(self.toolBox_5) - self.widget.setObjectName(_fromUtf8("widget")) - self.horizontalLayout_33 = QtGui.QHBoxLayout(self.widget) - self.horizontalLayout_33.setMargin(0) + self.gridLayout.setObjectName("gridLayout") + self.widget = QtWidgets.QWidget(self.toolBox_5) + self.widget.setObjectName("widget") + self.horizontalLayout_33 = QtWidgets.QHBoxLayout(self.widget) + self.horizontalLayout_33.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_33.setSpacing(0) - self.horizontalLayout_33.setObjectName(_fromUtf8("horizontalLayout_33")) - self.uiConnect_static = QtGui.QRadioButton(self.widget) + self.horizontalLayout_33.setObjectName("horizontalLayout_33") + self.uiConnect_static = QtWidgets.QRadioButton(self.widget) self.uiConnect_static.setChecked(True) - self.uiConnect_static.setObjectName(_fromUtf8("uiConnect_static")) + self.uiConnect_static.setObjectName("uiConnect_static") self.horizontalLayout_33.addWidget(self.uiConnect_static) - self.uiConnect_dynamic = QtGui.QRadioButton(self.widget) - self.uiConnect_dynamic.setObjectName(_fromUtf8("uiConnect_dynamic")) + self.uiConnect_dynamic = QtWidgets.QRadioButton(self.widget) + self.uiConnect_dynamic.setObjectName("uiConnect_dynamic") self.horizontalLayout_33.addWidget(self.uiConnect_dynamic) self.gridLayout.addWidget(self.widget, 1, 2, 1, 3) - self.uiConnect_dynControl = QtGui.QWidget(self.toolBox_5) + self.uiConnect_dynControl = QtWidgets.QWidget(self.toolBox_5) self.uiConnect_dynControl.setMinimumSize(QtCore.QSize(0, 0)) - self.uiConnect_dynControl.setObjectName(_fromUtf8("uiConnect_dynControl")) - self.horizontalLayout_36 = QtGui.QHBoxLayout(self.uiConnect_dynControl) - self.horizontalLayout_36.setMargin(0) - self.horizontalLayout_36.setObjectName(_fromUtf8("horizontalLayout_36")) - self.gridLayout_34 = QtGui.QGridLayout() - self.gridLayout_34.setObjectName(_fromUtf8("gridLayout_34")) - self.label_23 = QtGui.QLabel(self.uiConnect_dynControl) - self.label_23.setObjectName(_fromUtf8("label_23")) + self.uiConnect_dynControl.setObjectName("uiConnect_dynControl") + self.horizontalLayout_36 = QtWidgets.QHBoxLayout(self.uiConnect_dynControl) + self.horizontalLayout_36.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_36.setObjectName("horizontalLayout_36") + self.gridLayout_34 = QtWidgets.QGridLayout() + self.gridLayout_34.setObjectName("gridLayout_34") + self.label_23 = QtWidgets.QLabel(self.uiConnect_dynControl) + self.label_23.setObjectName("label_23") self.gridLayout_34.addWidget(self.label_23, 0, 0, 1, 1) - self.uiConnect_dynMin = QtGui.QDoubleSpinBox(self.uiConnect_dynControl) + self.uiConnect_dynMin = QtWidgets.QDoubleSpinBox(self.uiConnect_dynControl) self.uiConnect_dynMin.setDecimals(1) self.uiConnect_dynMin.setMinimum(0.1) self.uiConnect_dynMin.setMaximum(1.0) self.uiConnect_dynMin.setSingleStep(0.1) - self.uiConnect_dynMin.setObjectName(_fromUtf8("uiConnect_dynMin")) + self.uiConnect_dynMin.setObjectName("uiConnect_dynMin") self.gridLayout_34.addWidget(self.uiConnect_dynMin, 0, 1, 1, 1) - self.label_24 = QtGui.QLabel(self.uiConnect_dynControl) - self.label_24.setObjectName(_fromUtf8("label_24")) + self.label_24 = QtWidgets.QLabel(self.uiConnect_dynControl) + self.label_24.setObjectName("label_24") self.gridLayout_34.addWidget(self.label_24, 0, 2, 1, 1) - self.uiConnect_dynMax = QtGui.QDoubleSpinBox(self.uiConnect_dynControl) + self.uiConnect_dynMax = QtWidgets.QDoubleSpinBox(self.uiConnect_dynControl) self.uiConnect_dynMax.setDecimals(1) self.uiConnect_dynMax.setMaximum(1.0) self.uiConnect_dynMax.setSingleStep(0.1) self.uiConnect_dynMax.setProperty("value", 1.0) - self.uiConnect_dynMax.setObjectName(_fromUtf8("uiConnect_dynMax")) + self.uiConnect_dynMax.setObjectName("uiConnect_dynMax") self.gridLayout_34.addWidget(self.uiConnect_dynMax, 0, 3, 1, 1) self.horizontalLayout_36.addLayout(self.gridLayout_34) self.gridLayout.addWidget(self.uiConnect_dynControl, 2, 2, 1, 3) - self.uiConnect_colorby = QtGui.QComboBox(self.toolBox_5) - self.uiConnect_colorby.setObjectName(_fromUtf8("uiConnect_colorby")) - self.uiConnect_colorby.addItem(_fromUtf8("")) - self.uiConnect_colorby.addItem(_fromUtf8("")) - self.uiConnect_colorby.addItem(_fromUtf8("")) + self.uiConnect_colorby = QtWidgets.QComboBox(self.toolBox_5) + self.uiConnect_colorby.setObjectName("uiConnect_colorby") + self.uiConnect_colorby.addItem("") + self.uiConnect_colorby.addItem("") + self.uiConnect_colorby.addItem("") self.gridLayout.addWidget(self.uiConnect_colorby, 0, 3, 1, 1) - self.uiConnect_lw = QtGui.QDoubleSpinBox(self.toolBox_5) + self.uiConnect_lw = QtWidgets.QDoubleSpinBox(self.toolBox_5) self.uiConnect_lw.setMinimum(0.1) self.uiConnect_lw.setMaximum(9.0) self.uiConnect_lw.setSingleStep(0.1) self.uiConnect_lw.setProperty("value", 4.0) - self.uiConnect_lw.setObjectName(_fromUtf8("uiConnect_lw")) + self.uiConnect_lw.setObjectName("uiConnect_lw") self.gridLayout.addWidget(self.uiConnect_lw, 4, 2, 1, 3) - self.label_21 = QtGui.QLabel(self.toolBox_5) - self.label_21.setObjectName(_fromUtf8("label_21")) + self.label_21 = QtWidgets.QLabel(self.toolBox_5) + self.label_21.setObjectName("label_21") self.gridLayout.addWidget(self.label_21, 0, 2, 1, 1) - self.label_22 = QtGui.QLabel(self.toolBox_5) + self.label_22 = QtWidgets.QLabel(self.toolBox_5) font = QtGui.QFont() font.setItalic(True) self.label_22.setFont(font) - self.label_22.setObjectName(_fromUtf8("label_22")) + self.label_22.setObjectName("label_22") self.gridLayout.addWidget(self.label_22, 4, 0, 1, 1) - spacerItem28 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem28 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem28, 0, 4, 1, 1) - self.line_26 = QtGui.QFrame(self.toolBox_5) + self.line_26 = QtWidgets.QFrame(self.toolBox_5) self.line_26.setMinimumSize(QtCore.QSize(20, 0)) - self.line_26.setFrameShape(QtGui.QFrame.VLine) - self.line_26.setFrameShadow(QtGui.QFrame.Sunken) - self.line_26.setObjectName(_fromUtf8("line_26")) + self.line_26.setFrameShape(QtWidgets.QFrame.VLine) + self.line_26.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_26.setObjectName("line_26") self.gridLayout.addWidget(self.line_26, 4, 1, 1, 1) - self.line_21 = QtGui.QFrame(self.toolBox_5) + self.line_21 = QtWidgets.QFrame(self.toolBox_5) self.line_21.setMinimumSize(QtCore.QSize(20, 0)) - self.line_21.setFrameShape(QtGui.QFrame.VLine) - self.line_21.setFrameShadow(QtGui.QFrame.Sunken) - self.line_21.setObjectName(_fromUtf8("line_21")) + self.line_21.setFrameShape(QtWidgets.QFrame.VLine) + self.line_21.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_21.setObjectName("line_21") self.gridLayout.addWidget(self.line_21, 0, 1, 4, 1) - self.label_109 = QtGui.QLabel(self.toolBox_5) + self.label_109 = QtWidgets.QLabel(self.toolBox_5) font = QtGui.QFont() font.setItalic(True) self.label_109.setFont(font) - self.label_109.setObjectName(_fromUtf8("label_109")) + self.label_109.setObjectName("label_109") self.gridLayout.addWidget(self.label_109, 0, 0, 4, 1) - self._densityPanel = QtGui.QWidget(self.toolBox_5) + self._densityPanel = QtWidgets.QWidget(self.toolBox_5) self._densityPanel.setMinimumSize(QtCore.QSize(0, 0)) - self._densityPanel.setObjectName(_fromUtf8("_densityPanel")) - self.horizontalLayout = QtGui.QHBoxLayout(self._densityPanel) - self.horizontalLayout.setMargin(0) + self._densityPanel.setObjectName("_densityPanel") + self.horizontalLayout = QtWidgets.QHBoxLayout(self._densityPanel) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setSpacing(0) - self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) - self.label_5 = QtGui.QLabel(self._densityPanel) - self.label_5.setObjectName(_fromUtf8("label_5")) + self.horizontalLayout.setObjectName("horizontalLayout") + self.label_5 = QtWidgets.QLabel(self._densityPanel) + self.label_5.setObjectName("label_5") self.horizontalLayout.addWidget(self.label_5) - spacerItem29 = QtGui.QSpacerItem(30, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) + spacerItem29 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem29) - self._densityRadius = QtGui.QDoubleSpinBox(self._densityPanel) + self._densityRadius = QtWidgets.QDoubleSpinBox(self._densityPanel) self._densityRadius.setDecimals(1) self._densityRadius.setMinimum(1.0) - self._densityRadius.setObjectName(_fromUtf8("_densityRadius")) + self._densityRadius.setObjectName("_densityRadius") self.horizontalLayout.addWidget(self._densityRadius) - spacerItem30 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem30 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem30) self.gridLayout.addWidget(self._densityPanel, 3, 2, 1, 3) self.verticalLayout_39.addLayout(self.gridLayout) self.verticalLayout_63.addWidget(self.toolBox_5) - self.toolBox_6 = QtGui.QGroupBox(self.scrollAreaWidgetContents_8) - self.toolBox_6.setObjectName(_fromUtf8("toolBox_6")) - self.verticalLayout_40 = QtGui.QVBoxLayout(self.toolBox_6) + self.toolBox_6 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_8) + self.toolBox_6.setObjectName("toolBox_6") + self.verticalLayout_40 = QtWidgets.QVBoxLayout(self.toolBox_6) self.verticalLayout_40.setContentsMargins(0, -1, 0, -1) - self.verticalLayout_40.setObjectName(_fromUtf8("verticalLayout_40")) - self.line_56 = QtGui.QFrame(self.toolBox_6) + self.verticalLayout_40.setObjectName("verticalLayout_40") + self.line_56 = QtWidgets.QFrame(self.toolBox_6) self.line_56.setMinimumSize(QtCore.QSize(200, 0)) - self.line_56.setFrameShape(QtGui.QFrame.HLine) - self.line_56.setFrameShadow(QtGui.QFrame.Sunken) - self.line_56.setObjectName(_fromUtf8("line_56")) + self.line_56.setFrameShape(QtWidgets.QFrame.HLine) + self.line_56.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_56.setObjectName("line_56") self.verticalLayout_40.addWidget(self.line_56) - self._conBlEnable = QtGui.QCheckBox(self.toolBox_6) - self._conBlEnable.setObjectName(_fromUtf8("_conBlEnable")) + self._conBlEnable = QtWidgets.QCheckBox(self.toolBox_6) + self._conBlEnable.setObjectName("_conBlEnable") self.verticalLayout_40.addWidget(self._conBlEnable) - self._conBlPanel = QtGui.QWidget(self.toolBox_6) + self._conBlPanel = QtWidgets.QWidget(self.toolBox_6) self._conBlPanel.setEnabled(False) - self._conBlPanel.setObjectName(_fromUtf8("_conBlPanel")) - self.verticalLayout_9 = QtGui.QVBoxLayout(self._conBlPanel) - self.verticalLayout_9.setMargin(0) + self._conBlPanel.setObjectName("_conBlPanel") + self.verticalLayout_9 = QtWidgets.QVBoxLayout(self._conBlPanel) + self.verticalLayout_9.setContentsMargins(0, 0, 0, 0) self.verticalLayout_9.setSpacing(0) - self.verticalLayout_9.setObjectName(_fromUtf8("verticalLayout_9")) - self.gridLayout_3 = QtGui.QGridLayout() + self.verticalLayout_9.setObjectName("verticalLayout_9") + self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setContentsMargins(-1, 0, -1, 0) - self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) - self.line_58 = QtGui.QFrame(self._conBlPanel) + self.gridLayout_3.setObjectName("gridLayout_3") + self.line_58 = QtWidgets.QFrame(self._conBlPanel) self.line_58.setMinimumSize(QtCore.QSize(20, 0)) - self.line_58.setFrameShape(QtGui.QFrame.VLine) - self.line_58.setFrameShadow(QtGui.QFrame.Sunken) - self.line_58.setObjectName(_fromUtf8("line_58")) + self.line_58.setFrameShape(QtWidgets.QFrame.VLine) + self.line_58.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_58.setObjectName("line_58") self.gridLayout_3.addWidget(self.line_58, 0, 1, 1, 1) - self.label_37 = QtGui.QLabel(self._conBlPanel) - self.label_37.setObjectName(_fromUtf8("label_37")) + self.label_37 = QtWidgets.QLabel(self._conBlPanel) + self.label_37.setObjectName("label_37") self.gridLayout_3.addWidget(self.label_37, 0, 2, 1, 1) - self.label_38 = QtGui.QLabel(self._conBlPanel) - self.label_38.setObjectName(_fromUtf8("label_38")) + self.label_38 = QtWidgets.QLabel(self._conBlPanel) + self.label_38.setObjectName("label_38") self.gridLayout_3.addWidget(self.label_38, 0, 5, 1, 1) - self._conBlDxyz = QtGui.QDoubleSpinBox(self._conBlPanel) + self._conBlDxyz = QtWidgets.QDoubleSpinBox(self._conBlPanel) self._conBlDxyz.setDecimals(1) self._conBlDxyz.setMaximum(1.0) self._conBlDxyz.setSingleStep(0.1) - self._conBlDxyz.setObjectName(_fromUtf8("_conBlDxyz")) + self._conBlDxyz.setObjectName("_conBlDxyz") self.gridLayout_3.addWidget(self._conBlDxyz, 0, 6, 1, 1) - self.label_117 = QtGui.QLabel(self._conBlPanel) + self.label_117 = QtWidgets.QLabel(self._conBlPanel) font = QtGui.QFont() font.setItalic(True) self.label_117.setFont(font) - self.label_117.setObjectName(_fromUtf8("label_117")) + self.label_117.setObjectName("label_117") self.gridLayout_3.addWidget(self.label_117, 0, 0, 1, 1) - self._conBlRadius = QtGui.QDoubleSpinBox(self._conBlPanel) + self._conBlRadius = QtWidgets.QDoubleSpinBox(self._conBlPanel) self._conBlRadius.setDecimals(1) - self._conBlRadius.setObjectName(_fromUtf8("_conBlRadius")) + self._conBlRadius.setObjectName("_conBlRadius") self.gridLayout_3.addWidget(self._conBlRadius, 0, 3, 1, 1) - spacerItem31 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem31 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem31, 0, 4, 1, 1) - spacerItem32 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem32 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem32, 0, 7, 1, 1) self.verticalLayout_9.addLayout(self.gridLayout_3) self.verticalLayout_40.addWidget(self._conBlPanel) self.verticalLayout_63.addWidget(self.toolBox_6) - spacerItem33 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem33 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_63.addItem(spacerItem33) self.scrollArea_7.setWidget(self.scrollAreaWidgetContents_8) self.verticalLayout_13.addWidget(self.scrollArea_7) - self.QuickSettings.addTab(self.q_CONNECT, _fromUtf8("")) - self.q_AREA = QtGui.QWidget() - self.q_AREA.setObjectName(_fromUtf8("q_AREA")) - self.verticalLayout_27 = QtGui.QVBoxLayout(self.q_AREA) - self.verticalLayout_27.setObjectName(_fromUtf8("verticalLayout_27")) - self.horizontalLayout_43 = QtGui.QHBoxLayout() - self.horizontalLayout_43.setObjectName(_fromUtf8("horizontalLayout_43")) - spacerItem34 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.QuickSettings.addTab(self.q_CONNECT, "") + self.q_AREA = QtWidgets.QWidget() + self.q_AREA.setObjectName("q_AREA") + self.verticalLayout_27 = QtWidgets.QVBoxLayout(self.q_AREA) + self.verticalLayout_27.setObjectName("verticalLayout_27") + self.horizontalLayout_43 = QtWidgets.QHBoxLayout() + self.horizontalLayout_43.setObjectName("horizontalLayout_43") + spacerItem34 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_43.addItem(spacerItem34) - self.structEnable = QtGui.QCheckBox(self.q_AREA) + self.structEnable = QtWidgets.QCheckBox(self.q_AREA) self.structEnable.setEnabled(False) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.structEnable.setFont(font) - self.structEnable.setObjectName(_fromUtf8("structEnable")) + self.structEnable.setObjectName("structEnable") self.horizontalLayout_43.addWidget(self.structEnable) - self.strcutShow = QtGui.QCheckBox(self.q_AREA) + self.strcutShow = QtWidgets.QCheckBox(self.q_AREA) self.strcutShow.setEnabled(False) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.strcutShow.setFont(font) self.strcutShow.setChecked(True) - self.strcutShow.setObjectName(_fromUtf8("strcutShow")) + self.strcutShow.setObjectName("strcutShow") self.horizontalLayout_43.addWidget(self.strcutShow) - spacerItem35 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem35 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_43.addItem(spacerItem35) self.verticalLayout_27.addLayout(self.horizontalLayout_43) - self.scrollArea_8 = QtGui.QScrollArea(self.q_AREA) - self.scrollArea_8.setFrameShape(QtGui.QFrame.NoFrame) + self.scrollArea_8 = QtWidgets.QScrollArea(self.q_AREA) + self.scrollArea_8.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea_8.setWidgetResizable(True) - self.scrollArea_8.setObjectName(_fromUtf8("scrollArea_8")) - self.scrollAreaWidgetContents_10 = QtGui.QWidget() + self.scrollArea_8.setObjectName("scrollArea_8") + self.scrollAreaWidgetContents_10 = QtWidgets.QWidget() self.scrollAreaWidgetContents_10.setGeometry(QtCore.QRect(0, 0, 303, 666)) - self.scrollAreaWidgetContents_10.setObjectName(_fromUtf8("scrollAreaWidgetContents_10")) - self.verticalLayout_32 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_10) - self.verticalLayout_32.setObjectName(_fromUtf8("verticalLayout_32")) - self._roiSettingsW = QtGui.QGroupBox(self.scrollAreaWidgetContents_10) + self.scrollAreaWidgetContents_10.setObjectName("scrollAreaWidgetContents_10") + self.verticalLayout_32 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_10) + self.verticalLayout_32.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_32.setObjectName("verticalLayout_32") + self._roiSettingsW = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_10) self._roiSettingsW.setEnabled(True) - self._roiSettingsW.setObjectName(_fromUtf8("_roiSettingsW")) - self.verticalLayout_28 = QtGui.QVBoxLayout(self._roiSettingsW) - self.verticalLayout_28.setObjectName(_fromUtf8("verticalLayout_28")) - self.line_49 = QtGui.QFrame(self._roiSettingsW) + self._roiSettingsW.setObjectName("_roiSettingsW") + self.verticalLayout_28 = QtWidgets.QVBoxLayout(self._roiSettingsW) + self.verticalLayout_28.setObjectName("verticalLayout_28") + self.line_49 = QtWidgets.QFrame(self._roiSettingsW) self.line_49.setMinimumSize(QtCore.QSize(200, 0)) - self.line_49.setFrameShape(QtGui.QFrame.HLine) - self.line_49.setFrameShadow(QtGui.QFrame.Sunken) - self.line_49.setObjectName(_fromUtf8("line_49")) + self.line_49.setFrameShape(QtWidgets.QFrame.HLine) + self.line_49.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_49.setObjectName("line_49") self.verticalLayout_28.addWidget(self.line_49) - self.gridLayout_39 = QtGui.QGridLayout() + self.gridLayout_39 = QtWidgets.QGridLayout() self.gridLayout_39.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_39.setObjectName(_fromUtf8("gridLayout_39")) - self._roiSmooth = QtGui.QSpinBox(self._roiSettingsW) + self.gridLayout_39.setObjectName("gridLayout_39") + self._roiSmooth = QtWidgets.QSpinBox(self._roiSettingsW) self._roiSmooth.setMinimum(3) self._roiSmooth.setSingleStep(2) - self._roiSmooth.setObjectName(_fromUtf8("_roiSmooth")) + self._roiSmooth.setObjectName("_roiSmooth") self.gridLayout_39.addWidget(self._roiSmooth, 2, 2, 1, 1) - self.label_113 = QtGui.QLabel(self._roiSettingsW) + self.label_113 = QtWidgets.QLabel(self._roiSettingsW) font = QtGui.QFont() font.setItalic(True) self.label_113.setFont(font) - self.label_113.setObjectName(_fromUtf8("label_113")) + self.label_113.setObjectName("label_113") self.gridLayout_39.addWidget(self.label_113, 1, 0, 1, 1) - self.line_3 = QtGui.QFrame(self._roiSettingsW) + self.line_3 = QtWidgets.QFrame(self._roiSettingsW) self.line_3.setMinimumSize(QtCore.QSize(10, 0)) - self.line_3.setFrameShape(QtGui.QFrame.VLine) - self.line_3.setFrameShadow(QtGui.QFrame.Sunken) - self.line_3.setObjectName(_fromUtf8("line_3")) + self.line_3.setFrameShape(QtWidgets.QFrame.VLine) + self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_3.setObjectName("line_3") self.gridLayout_39.addWidget(self.line_3, 1, 1, 1, 1) - self.line_2 = QtGui.QFrame(self._roiSettingsW) + self.line_2 = QtWidgets.QFrame(self._roiSettingsW) self.line_2.setMinimumSize(QtCore.QSize(10, 0)) - self.line_2.setFrameShape(QtGui.QFrame.VLine) - self.line_2.setFrameShadow(QtGui.QFrame.Sunken) - self.line_2.setObjectName(_fromUtf8("line_2")) + self.line_2.setFrameShape(QtWidgets.QFrame.VLine) + self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_2.setObjectName("line_2") self.gridLayout_39.addWidget(self.line_2, 0, 1, 1, 1) - self.label_112 = QtGui.QLabel(self._roiSettingsW) + self.label_112 = QtWidgets.QLabel(self._roiSettingsW) font = QtGui.QFont() font.setItalic(True) self.label_112.setFont(font) - self.label_112.setObjectName(_fromUtf8("label_112")) + self.label_112.setObjectName("label_112") self.gridLayout_39.addWidget(self.label_112, 0, 0, 1, 1) - self.line_4 = QtGui.QFrame(self._roiSettingsW) + self.line_4 = QtWidgets.QFrame(self._roiSettingsW) self.line_4.setMinimumSize(QtCore.QSize(10, 0)) - self.line_4.setFrameShape(QtGui.QFrame.VLine) - self.line_4.setFrameShadow(QtGui.QFrame.Sunken) - self.line_4.setObjectName(_fromUtf8("line_4")) + self.line_4.setFrameShape(QtWidgets.QFrame.VLine) + self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_4.setObjectName("line_4") self.gridLayout_39.addWidget(self.line_4, 2, 1, 1, 1) - spacerItem36 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem36 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_39.addItem(spacerItem36, 3, 2, 1, 1) - self.widget_15 = QtGui.QWidget(self._roiSettingsW) - self.widget_15.setObjectName(_fromUtf8("widget_15")) - self.gridLayout_42 = QtGui.QGridLayout(self.widget_15) - self.gridLayout_42.setMargin(0) - self.gridLayout_42.setObjectName(_fromUtf8("gridLayout_42")) - self.Sub_aal = QtGui.QRadioButton(self.widget_15) + self.widget_15 = QtWidgets.QWidget(self._roiSettingsW) + self.widget_15.setObjectName("widget_15") + self.gridLayout_42 = QtWidgets.QGridLayout(self.widget_15) + self.gridLayout_42.setContentsMargins(0, 0, 0, 0) + self.gridLayout_42.setObjectName("gridLayout_42") + self.Sub_aal = QtWidgets.QRadioButton(self.widget_15) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.Sub_aal.setFont(font) - self.Sub_aal.setObjectName(_fromUtf8("Sub_aal")) + self.Sub_aal.setObjectName("Sub_aal") self.gridLayout_42.addWidget(self.Sub_aal, 0, 1, 1, 1) - self.Sub_brod = QtGui.QRadioButton(self.widget_15) + self.Sub_brod = QtWidgets.QRadioButton(self.widget_15) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.Sub_brod.setFont(font) self.Sub_brod.setChecked(True) - self.Sub_brod.setObjectName(_fromUtf8("Sub_brod")) + self.Sub_brod.setObjectName("Sub_brod") self.gridLayout_42.addWidget(self.Sub_brod, 0, 0, 1, 1) self.gridLayout_39.addWidget(self.widget_15, 1, 2, 1, 1) - self.label_2 = QtGui.QLabel(self._roiSettingsW) + self.label_2 = QtWidgets.QLabel(self._roiSettingsW) font = QtGui.QFont() font.setItalic(True) self.label_2.setFont(font) - self.label_2.setObjectName(_fromUtf8("label_2")) + self.label_2.setObjectName("label_2") self.gridLayout_39.addWidget(self.label_2, 2, 0, 1, 1) - self._roiReflect = QtGui.QWidget(self._roiSettingsW) + self._roiReflect = QtWidgets.QWidget(self._roiSettingsW) self._roiReflect.setEnabled(False) - self._roiReflect.setObjectName(_fromUtf8("_roiReflect")) - self.gridLayout_41 = QtGui.QGridLayout(self._roiReflect) - self.gridLayout_41.setMargin(0) - self.gridLayout_41.setObjectName(_fromUtf8("gridLayout_41")) - self.struct_External = QtGui.QRadioButton(self._roiReflect) + self._roiReflect.setObjectName("_roiReflect") + self.gridLayout_41 = QtWidgets.QGridLayout(self._roiReflect) + self.gridLayout_41.setContentsMargins(0, 0, 0, 0) + self.gridLayout_41.setObjectName("gridLayout_41") + self.struct_External = QtWidgets.QRadioButton(self._roiReflect) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.struct_External.setFont(font) self.struct_External.setChecked(True) - self.struct_External.setObjectName(_fromUtf8("struct_External")) + self.struct_External.setObjectName("struct_External") self.gridLayout_41.addWidget(self.struct_External, 0, 1, 1, 1) - self.struct_Internal = QtGui.QRadioButton(self._roiReflect) + self.struct_Internal = QtWidgets.QRadioButton(self._roiReflect) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.struct_Internal.setFont(font) self.struct_Internal.setChecked(False) - self.struct_Internal.setObjectName(_fromUtf8("struct_Internal")) + self.struct_Internal.setObjectName("struct_Internal") self.gridLayout_41.addWidget(self.struct_Internal, 0, 0, 1, 1) self.gridLayout_39.addWidget(self._roiReflect, 0, 2, 1, 1) self.verticalLayout_28.addLayout(self.gridLayout_39) self.verticalLayout_32.addWidget(self._roiSettingsW) - self.groupBox_16 = QtGui.QGroupBox(self.scrollAreaWidgetContents_10) - self.groupBox_16.setObjectName(_fromUtf8("groupBox_16")) - self.verticalLayout_43 = QtGui.QVBoxLayout(self.groupBox_16) - self.verticalLayout_43.setObjectName(_fromUtf8("verticalLayout_43")) - self.line_55 = QtGui.QFrame(self.groupBox_16) + self.groupBox_16 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_10) + self.groupBox_16.setObjectName("groupBox_16") + self.verticalLayout_43 = QtWidgets.QVBoxLayout(self.groupBox_16) + self.verticalLayout_43.setObjectName("verticalLayout_43") + self.line_55 = QtWidgets.QFrame(self.groupBox_16) self.line_55.setMinimumSize(QtCore.QSize(200, 0)) - self.line_55.setFrameShape(QtGui.QFrame.HLine) - self.line_55.setFrameShadow(QtGui.QFrame.Sunken) - self.line_55.setObjectName(_fromUtf8("line_55")) + self.line_55.setFrameShape(QtWidgets.QFrame.HLine) + self.line_55.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_55.setObjectName("line_55") self.verticalLayout_43.addWidget(self.line_55) - self.verticalLayout_42 = QtGui.QVBoxLayout() + self.verticalLayout_42 = QtWidgets.QVBoxLayout() self.verticalLayout_42.setContentsMargins(-1, 0, -1, 0) - self.verticalLayout_42.setObjectName(_fromUtf8("verticalLayout_42")) - self.horizontalLayout_42 = QtGui.QHBoxLayout() + self.verticalLayout_42.setObjectName("verticalLayout_42") + self.horizontalLayout_42 = QtWidgets.QHBoxLayout() self.horizontalLayout_42.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_42.setObjectName(_fromUtf8("horizontalLayout_42")) - self.struct2select = QtGui.QListWidget(self.groupBox_16) + self.horizontalLayout_42.setObjectName("horizontalLayout_42") + self.struct2select = QtWidgets.QListWidget(self.groupBox_16) self.struct2select.setMinimumSize(QtCore.QSize(0, 300)) font = QtGui.QFont() font.setBold(False) @@ -1626,373 +1620,375 @@ def setupUi(self, MainWindow): self.struct2select.setFont(font) self.struct2select.setTabKeyNavigation(True) self.struct2select.setAlternatingRowColors(True) - self.struct2select.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) - self.struct2select.setObjectName(_fromUtf8("struct2select")) + self.struct2select.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.struct2select.setObjectName("struct2select") self.horizontalLayout_42.addWidget(self.struct2select) - self.struct2add = QtGui.QListWidget(self.groupBox_16) + self.struct2add = QtWidgets.QListWidget(self.groupBox_16) self.struct2add.setMinimumSize(QtCore.QSize(0, 300)) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.struct2add.setFont(font) - self.struct2add.setObjectName(_fromUtf8("struct2add")) + self.struct2add.setObjectName("struct2add") self.horizontalLayout_42.addWidget(self.struct2add) self.verticalLayout_42.addLayout(self.horizontalLayout_42) - self.horizontalLayout_47 = QtGui.QHBoxLayout() + self.horizontalLayout_47 = QtWidgets.QHBoxLayout() self.horizontalLayout_47.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_47.setSpacing(0) - self.horizontalLayout_47.setObjectName(_fromUtf8("horizontalLayout_47")) - spacerItem37 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_47.setObjectName("horizontalLayout_47") + spacerItem37 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_47.addItem(spacerItem37) - self.struct_addLst = QtGui.QPushButton(self.groupBox_16) - self.struct_addLst.setObjectName(_fromUtf8("struct_addLst")) + self.struct_addLst = QtWidgets.QPushButton(self.groupBox_16) + self.struct_addLst.setObjectName("struct_addLst") self.horizontalLayout_47.addWidget(self.struct_addLst) - self.struct_rstLst = QtGui.QPushButton(self.groupBox_16) - self.struct_rstLst.setObjectName(_fromUtf8("struct_rstLst")) + self.struct_rstLst = QtWidgets.QPushButton(self.groupBox_16) + self.struct_rstLst.setObjectName("struct_rstLst") self.horizontalLayout_47.addWidget(self.struct_rstLst) - self.struct_rmvLst = QtGui.QPushButton(self.groupBox_16) - self.struct_rmvLst.setObjectName(_fromUtf8("struct_rmvLst")) + self.struct_rmvLst = QtWidgets.QPushButton(self.groupBox_16) + self.struct_rmvLst.setObjectName("struct_rmvLst") self.horizontalLayout_47.addWidget(self.struct_rmvLst) - spacerItem38 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem38 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_47.addItem(spacerItem38) self.verticalLayout_42.addLayout(self.horizontalLayout_47) self.verticalLayout_43.addLayout(self.verticalLayout_42) self.verticalLayout_32.addWidget(self.groupBox_16) - self.structPanel = QtGui.QWidget(self.scrollAreaWidgetContents_10) - self.structPanel.setObjectName(_fromUtf8("structPanel")) - self.verticalLayout_47 = QtGui.QVBoxLayout(self.structPanel) - self.verticalLayout_47.setMargin(0) + self.structPanel = QtWidgets.QWidget(self.scrollAreaWidgetContents_10) + self.structPanel.setObjectName("structPanel") + self.verticalLayout_47 = QtWidgets.QVBoxLayout(self.structPanel) + self.verticalLayout_47.setContentsMargins(0, 0, 0, 0) self.verticalLayout_47.setSpacing(0) - self.verticalLayout_47.setObjectName(_fromUtf8("verticalLayout_47")) - self.groupBox_19 = QtGui.QGroupBox(self.structPanel) - self.groupBox_19.setObjectName(_fromUtf8("groupBox_19")) - self.verticalLayout_44 = QtGui.QVBoxLayout(self.groupBox_19) - self.verticalLayout_44.setObjectName(_fromUtf8("verticalLayout_44")) - self.horizontalLayout_46 = QtGui.QHBoxLayout() + self.verticalLayout_47.setObjectName("verticalLayout_47") + self.groupBox_19 = QtWidgets.QGroupBox(self.structPanel) + self.groupBox_19.setObjectName("groupBox_19") + self.verticalLayout_44 = QtWidgets.QVBoxLayout(self.groupBox_19) + self.verticalLayout_44.setObjectName("verticalLayout_44") + self.horizontalLayout_46 = QtWidgets.QHBoxLayout() self.horizontalLayout_46.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_46.setObjectName(_fromUtf8("horizontalLayout_46")) - self.label_16 = QtGui.QLabel(self.groupBox_19) + self.horizontalLayout_46.setObjectName("horizontalLayout_46") + self.label_16 = QtWidgets.QLabel(self.groupBox_19) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_16.setFont(font) - self.label_16.setObjectName(_fromUtf8("label_16")) + self.label_16.setObjectName("label_16") self.horizontalLayout_46.addWidget(self.label_16) - self.struct_color_edit = QtGui.QLineEdit(self.groupBox_19) - self.struct_color_edit.setInputMask(_fromUtf8("")) - self.struct_color_edit.setText(_fromUtf8("")) - self.struct_color_edit.setPlaceholderText(_fromUtf8("")) - self.struct_color_edit.setObjectName(_fromUtf8("struct_color_edit")) + self.struct_color_edit = QtWidgets.QLineEdit(self.groupBox_19) + self.struct_color_edit.setInputMask("") + self.struct_color_edit.setText("") + self.struct_color_edit.setPlaceholderText("") + self.struct_color_edit.setObjectName("struct_color_edit") self.horizontalLayout_46.addWidget(self.struct_color_edit) self.verticalLayout_44.addLayout(self.horizontalLayout_46) self.verticalLayout_47.addWidget(self.groupBox_19) self.verticalLayout_32.addWidget(self.structPanel) - spacerItem39 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem39 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_32.addItem(spacerItem39) - self.horizontalLayout_49 = QtGui.QHBoxLayout() + self.horizontalLayout_49 = QtWidgets.QHBoxLayout() self.horizontalLayout_49.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_49.setObjectName(_fromUtf8("horizontalLayout_49")) - spacerItem40 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_49.setObjectName("horizontalLayout_49") + spacerItem40 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_49.addItem(spacerItem40) - self.struct_apply = QtGui.QPushButton(self.scrollAreaWidgetContents_10) - self.struct_apply.setObjectName(_fromUtf8("struct_apply")) + self.struct_apply = QtWidgets.QPushButton(self.scrollAreaWidgetContents_10) + self.struct_apply.setObjectName("struct_apply") self.horizontalLayout_49.addWidget(self.struct_apply) - spacerItem41 = QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) + spacerItem41 = QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_49.addItem(spacerItem41) - self.structClear = QtGui.QPushButton(self.scrollAreaWidgetContents_10) - self.structClear.setObjectName(_fromUtf8("structClear")) + self.structClear = QtWidgets.QPushButton(self.scrollAreaWidgetContents_10) + self.structClear.setObjectName("structClear") self.horizontalLayout_49.addWidget(self.structClear) - spacerItem42 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem42 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_49.addItem(spacerItem42) self.verticalLayout_32.addLayout(self.horizontalLayout_49) self.scrollArea_8.setWidget(self.scrollAreaWidgetContents_10) self.verticalLayout_27.addWidget(self.scrollArea_8) - self.QuickSettings.addTab(self.q_AREA, _fromUtf8("")) - self.q_TRANS = QtGui.QWidget() - self.q_TRANS.setObjectName(_fromUtf8("q_TRANS")) - self.verticalLayout_23 = QtGui.QVBoxLayout(self.q_TRANS) - self.verticalLayout_23.setObjectName(_fromUtf8("verticalLayout_23")) - self.horizontalLayout_40 = QtGui.QHBoxLayout() + self.QuickSettings.addTab(self.q_AREA, "") + self.q_TRANS = QtWidgets.QWidget() + self.q_TRANS.setObjectName("q_TRANS") + self.verticalLayout_23 = QtWidgets.QVBoxLayout(self.q_TRANS) + self.verticalLayout_23.setObjectName("verticalLayout_23") + self.horizontalLayout_40 = QtWidgets.QHBoxLayout() self.horizontalLayout_40.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_40.setObjectName(_fromUtf8("horizontalLayout_40")) - spacerItem43 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_40.setObjectName("horizontalLayout_40") + spacerItem43 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_40.addItem(spacerItem43) - self._qcmapVisible = QtGui.QCheckBox(self.q_TRANS) + self._qcmapVisible = QtWidgets.QCheckBox(self.q_TRANS) self._qcmapVisible.setChecked(False) - self._qcmapVisible.setObjectName(_fromUtf8("_qcmapVisible")) + self._qcmapVisible.setObjectName("_qcmapVisible") self.horizontalLayout_40.addWidget(self._qcmapVisible) - spacerItem44 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem44 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_40.addItem(spacerItem44) self.verticalLayout_23.addLayout(self.horizontalLayout_40) - self.colorbar_pan = QtGui.QWidget(self.q_TRANS) + self.colorbar_pan = QtWidgets.QWidget(self.q_TRANS) self.colorbar_pan.setMinimumSize(QtCore.QSize(0, 0)) - self.colorbar_pan.setObjectName(_fromUtf8("colorbar_pan")) - self.verticalLayout_46 = QtGui.QVBoxLayout(self.colorbar_pan) - self.verticalLayout_46.setObjectName(_fromUtf8("verticalLayout_46")) - self.groupBox_12 = QtGui.QGroupBox(self.colorbar_pan) - self.groupBox_12.setObjectName(_fromUtf8("groupBox_12")) - self.horizontalLayout_39 = QtGui.QHBoxLayout(self.groupBox_12) - self.horizontalLayout_39.setObjectName(_fromUtf8("horizontalLayout_39")) - self.gridLayout_4 = QtGui.QGridLayout() + self.colorbar_pan.setObjectName("colorbar_pan") + self.verticalLayout_46 = QtWidgets.QVBoxLayout(self.colorbar_pan) + self.verticalLayout_46.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_46.setObjectName("verticalLayout_46") + self.groupBox_12 = QtWidgets.QGroupBox(self.colorbar_pan) + self.groupBox_12.setObjectName("groupBox_12") + self.horizontalLayout_39 = QtWidgets.QHBoxLayout(self.groupBox_12) + self.horizontalLayout_39.setObjectName("horizontalLayout_39") + self.gridLayout_4 = QtWidgets.QGridLayout() self.gridLayout_4.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4")) - self.cmapSources = QtGui.QRadioButton(self.groupBox_12) + self.gridLayout_4.setObjectName("gridLayout_4") + self.cmapSources = QtWidgets.QRadioButton(self.groupBox_12) self.cmapSources.setChecked(True) - self.cmapSources.setObjectName(_fromUtf8("cmapSources")) + self.cmapSources.setObjectName("cmapSources") self.gridLayout_4.addWidget(self.cmapSources, 0, 1, 1, 1) - self.cmapConnect = QtGui.QRadioButton(self.groupBox_12) - self.cmapConnect.setObjectName(_fromUtf8("cmapConnect")) + self.cmapConnect = QtWidgets.QRadioButton(self.groupBox_12) + self.cmapConnect.setObjectName("cmapConnect") self.gridLayout_4.addWidget(self.cmapConnect, 0, 2, 1, 1) - spacerItem45 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem45 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem45, 0, 0, 1, 1) - spacerItem46 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem46 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem46, 0, 3, 1, 1) self.horizontalLayout_39.addLayout(self.gridLayout_4) self.verticalLayout_46.addWidget(self.groupBox_12) - self.groupBox_13 = QtGui.QGroupBox(self.colorbar_pan) - self.groupBox_13.setObjectName(_fromUtf8("groupBox_13")) - self.verticalLayout_41 = QtGui.QVBoxLayout(self.groupBox_13) - self.verticalLayout_41.setObjectName(_fromUtf8("verticalLayout_41")) - self.verticalLayout_21 = QtGui.QVBoxLayout() - self.verticalLayout_21.setObjectName(_fromUtf8("verticalLayout_21")) - self.horizontalLayout_18 = QtGui.QHBoxLayout() + self.groupBox_13 = QtWidgets.QGroupBox(self.colorbar_pan) + self.groupBox_13.setObjectName("groupBox_13") + self.verticalLayout_41 = QtWidgets.QVBoxLayout(self.groupBox_13) + self.verticalLayout_41.setObjectName("verticalLayout_41") + self.verticalLayout_21 = QtWidgets.QVBoxLayout() + self.verticalLayout_21.setObjectName("verticalLayout_21") + self.horizontalLayout_18 = QtWidgets.QHBoxLayout() self.horizontalLayout_18.setContentsMargins(-1, -1, -1, 0) - self.horizontalLayout_18.setObjectName(_fromUtf8("horizontalLayout_18")) - self.label_10 = QtGui.QLabel(self.groupBox_13) - self.label_10.setObjectName(_fromUtf8("label_10")) + self.horizontalLayout_18.setObjectName("horizontalLayout_18") + self.label_10 = QtWidgets.QLabel(self.groupBox_13) + self.label_10.setObjectName("label_10") self.horizontalLayout_18.addWidget(self.label_10) - self.q_cmap_list = QtGui.QComboBox(self.groupBox_13) + self.q_cmap_list = QtWidgets.QComboBox(self.groupBox_13) self.q_cmap_list.setEditable(False) - self.q_cmap_list.setObjectName(_fromUtf8("q_cmap_list")) + self.q_cmap_list.setObjectName("q_cmap_list") self.horizontalLayout_18.addWidget(self.q_cmap_list) - self.q_cmap_invert = QtGui.QCheckBox(self.groupBox_13) - self.q_cmap_invert.setObjectName(_fromUtf8("q_cmap_invert")) + self.q_cmap_invert = QtWidgets.QCheckBox(self.groupBox_13) + self.q_cmap_invert.setObjectName("q_cmap_invert") self.horizontalLayout_18.addWidget(self.q_cmap_invert) - self.q_auto_scale = QtGui.QPushButton(self.groupBox_13) - self.q_auto_scale.setObjectName(_fromUtf8("q_auto_scale")) + self.q_auto_scale = QtWidgets.QPushButton(self.groupBox_13) + self.q_auto_scale.setObjectName("q_auto_scale") self.horizontalLayout_18.addWidget(self.q_auto_scale) - spacerItem47 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem47 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_18.addItem(spacerItem47) self.verticalLayout_21.addLayout(self.horizontalLayout_18) - self.horizontalLayout_48 = QtGui.QHBoxLayout() + self.horizontalLayout_48 = QtWidgets.QHBoxLayout() self.horizontalLayout_48.setContentsMargins(-1, -1, -1, 5) - self.horizontalLayout_48.setObjectName(_fromUtf8("horizontalLayout_48")) - self.label_18 = QtGui.QLabel(self.groupBox_13) - self.label_18.setObjectName(_fromUtf8("label_18")) + self.horizontalLayout_48.setObjectName("horizontalLayout_48") + self.label_18 = QtWidgets.QLabel(self.groupBox_13) + self.label_18.setObjectName("label_18") self.horizontalLayout_48.addWidget(self.label_18) - spacerItem48 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem48 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_48.addItem(spacerItem48) - self.q_cmin = QtGui.QDoubleSpinBox(self.groupBox_13) + self.q_cmin = QtWidgets.QDoubleSpinBox(self.groupBox_13) self.q_cmin.setMinimum(-16777215.0) self.q_cmin.setMaximum(16777215.0) self.q_cmin.setSingleStep(1.0) - self.q_cmin.setObjectName(_fromUtf8("q_cmin")) + self.q_cmin.setObjectName("q_cmin") self.horizontalLayout_48.addWidget(self.q_cmin) - spacerItem49 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem49 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_48.addItem(spacerItem49) - self.q_cmax = QtGui.QDoubleSpinBox(self.groupBox_13) + self.q_cmax = QtWidgets.QDoubleSpinBox(self.groupBox_13) self.q_cmax.setMinimum(-16777215.0) self.q_cmax.setMaximum(16777215.0) - self.q_cmax.setObjectName(_fromUtf8("q_cmax")) + self.q_cmax.setObjectName("q_cmax") self.horizontalLayout_48.addWidget(self.q_cmax) - spacerItem50 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem50 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_48.addItem(spacerItem50) self.verticalLayout_21.addLayout(self.horizontalLayout_48) - self.horizontalLayout_20 = QtGui.QHBoxLayout() + self.horizontalLayout_20 = QtWidgets.QHBoxLayout() self.horizontalLayout_20.setContentsMargins(-1, -1, -1, 5) - self.horizontalLayout_20.setObjectName(_fromUtf8("horizontalLayout_20")) - self.q_vmin_chk = QtGui.QCheckBox(self.groupBox_13) - self.q_vmin_chk.setObjectName(_fromUtf8("q_vmin_chk")) + self.horizontalLayout_20.setObjectName("horizontalLayout_20") + self.q_vmin_chk = QtWidgets.QCheckBox(self.groupBox_13) + self.q_vmin_chk.setObjectName("q_vmin_chk") self.horizontalLayout_20.addWidget(self.q_vmin_chk) - spacerItem51 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem51 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_20.addItem(spacerItem51) - self.q_vmin = QtGui.QDoubleSpinBox(self.groupBox_13) + self.q_vmin = QtWidgets.QDoubleSpinBox(self.groupBox_13) self.q_vmin.setMinimum(-16777215.0) self.q_vmin.setMaximum(16777215.0) self.q_vmin.setSingleStep(1.0) - self.q_vmin.setObjectName(_fromUtf8("q_vmin")) + self.q_vmin.setObjectName("q_vmin") self.horizontalLayout_20.addWidget(self.q_vmin) - spacerItem52 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem52 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_20.addItem(spacerItem52) - self.q_vmax_chk = QtGui.QCheckBox(self.groupBox_13) - self.q_vmax_chk.setObjectName(_fromUtf8("q_vmax_chk")) + self.q_vmax_chk = QtWidgets.QCheckBox(self.groupBox_13) + self.q_vmax_chk.setObjectName("q_vmax_chk") self.horizontalLayout_20.addWidget(self.q_vmax_chk) - self.q_vmax = QtGui.QDoubleSpinBox(self.groupBox_13) + self.q_vmax = QtWidgets.QDoubleSpinBox(self.groupBox_13) self.q_vmax.setMinimum(-16777215.0) self.q_vmax.setMaximum(16777215.0) - self.q_vmax.setObjectName(_fromUtf8("q_vmax")) + self.q_vmax.setObjectName("q_vmax") self.horizontalLayout_20.addWidget(self.q_vmax) - spacerItem53 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem53 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_20.addItem(spacerItem53) self.verticalLayout_21.addLayout(self.horizontalLayout_20) - self.horizontalLayout_21 = QtGui.QHBoxLayout() - self.horizontalLayout_21.setObjectName(_fromUtf8("horizontalLayout_21")) - self.qUnder_txt = QtGui.QLabel(self.groupBox_13) - self.qUnder_txt.setObjectName(_fromUtf8("qUnder_txt")) + self.horizontalLayout_21 = QtWidgets.QHBoxLayout() + self.horizontalLayout_21.setObjectName("horizontalLayout_21") + self.qUnder_txt = QtWidgets.QLabel(self.groupBox_13) + self.qUnder_txt.setObjectName("qUnder_txt") self.horizontalLayout_21.addWidget(self.qUnder_txt) - self.q_under = QtGui.QLineEdit(self.groupBox_13) - self.q_under.setObjectName(_fromUtf8("q_under")) + self.q_under = QtWidgets.QLineEdit(self.groupBox_13) + self.q_under.setObjectName("q_under") self.horizontalLayout_21.addWidget(self.q_under) - self.qOver_txt = QtGui.QLabel(self.groupBox_13) - self.qOver_txt.setObjectName(_fromUtf8("qOver_txt")) + self.qOver_txt = QtWidgets.QLabel(self.groupBox_13) + self.qOver_txt.setObjectName("qOver_txt") self.horizontalLayout_21.addWidget(self.qOver_txt) - self.q_over = QtGui.QLineEdit(self.groupBox_13) - self.q_over.setObjectName(_fromUtf8("q_over")) + self.q_over = QtWidgets.QLineEdit(self.groupBox_13) + self.q_over.setObjectName("q_over") self.horizontalLayout_21.addWidget(self.q_over) self.verticalLayout_21.addLayout(self.horizontalLayout_21) - self.line = QtGui.QFrame(self.groupBox_13) - self.line.setFrameShape(QtGui.QFrame.HLine) - self.line.setFrameShadow(QtGui.QFrame.Sunken) - self.line.setObjectName(_fromUtf8("line")) + self.line = QtWidgets.QFrame(self.groupBox_13) + self.line.setFrameShape(QtWidgets.QFrame.HLine) + self.line.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line.setObjectName("line") self.verticalLayout_21.addWidget(self.line) - self.horizontalLayout_25 = QtGui.QHBoxLayout() + self.horizontalLayout_25 = QtWidgets.QHBoxLayout() self.horizontalLayout_25.setSpacing(0) - self.horizontalLayout_25.setObjectName(_fromUtf8("horizontalLayout_25")) - self.label_11 = QtGui.QLabel(self.groupBox_13) - self.label_11.setObjectName(_fromUtf8("label_11")) + self.horizontalLayout_25.setObjectName("horizontalLayout_25") + self.label_11 = QtWidgets.QLabel(self.groupBox_13) + self.label_11.setObjectName("label_11") self.horizontalLayout_25.addWidget(self.label_11) - self.q_cblabel = QtGui.QLineEdit(self.groupBox_13) - self.q_cblabel.setObjectName(_fromUtf8("q_cblabel")) + self.q_cblabel = QtWidgets.QLineEdit(self.groupBox_13) + self.q_cblabel.setObjectName("q_cblabel") self.horizontalLayout_25.addWidget(self.q_cblabel) self.verticalLayout_21.addLayout(self.horizontalLayout_25) self.verticalLayout_41.addLayout(self.verticalLayout_21) self.verticalLayout_46.addWidget(self.groupBox_13) self.verticalLayout_23.addWidget(self.colorbar_pan) - spacerItem54 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem54 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_23.addItem(spacerItem54) - self.QuickSettings.addTab(self.q_TRANS, _fromUtf8("")) + self.QuickSettings.addTab(self.q_TRANS, "") self.verticalLayout_4.addWidget(self.QuickSettings) - self.progressBar = QtGui.QProgressBar(self.q_widget) + self.progressBar = QtWidgets.QProgressBar(self.q_widget) self.progressBar.setProperty("value", 0) - self.progressBar.setObjectName(_fromUtf8("progressBar")) + self.progressBar.setObjectName("progressBar") self.verticalLayout_4.addWidget(self.progressBar) - self.UserMsgBox = QtGui.QWidget(self.q_widget) + self.UserMsgBox = QtWidgets.QWidget(self.q_widget) self.UserMsgBox.setMinimumSize(QtCore.QSize(0, 0)) - self.UserMsgBox.setObjectName(_fromUtf8("UserMsgBox")) - self.horizontalLayout_52 = QtGui.QHBoxLayout(self.UserMsgBox) - self.horizontalLayout_52.setObjectName(_fromUtf8("horizontalLayout_52")) - self.uiErrorMsg = QtGui.QLabel(self.UserMsgBox) + self.UserMsgBox.setObjectName("UserMsgBox") + self.horizontalLayout_52 = QtWidgets.QHBoxLayout(self.UserMsgBox) + self.horizontalLayout_52.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_52.setObjectName("horizontalLayout_52") + self.uiErrorMsg = QtWidgets.QLabel(self.UserMsgBox) font = QtGui.QFont() font.setPointSize(9) font.setBold(True) font.setWeight(75) self.uiErrorMsg.setFont(font) - self.uiErrorMsg.setObjectName(_fromUtf8("uiErrorMsg")) + self.uiErrorMsg.setObjectName("uiErrorMsg") self.horizontalLayout_52.addWidget(self.uiErrorMsg) - spacerItem55 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem55 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_52.addItem(spacerItem55) self.verticalLayout_4.addWidget(self.UserMsgBox) - self.userRotationPanel = QtGui.QFrame(self.q_widget) - self.userRotationPanel.setFrameShape(QtGui.QFrame.StyledPanel) - self.userRotationPanel.setFrameShadow(QtGui.QFrame.Raised) - self.userRotationPanel.setObjectName(_fromUtf8("userRotationPanel")) - self.horizontalLayout_10 = QtGui.QHBoxLayout(self.userRotationPanel) - self.horizontalLayout_10.setMargin(0) + self.userRotationPanel = QtWidgets.QFrame(self.q_widget) + self.userRotationPanel.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.userRotationPanel.setFrameShadow(QtWidgets.QFrame.Raised) + self.userRotationPanel.setObjectName("userRotationPanel") + self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.userRotationPanel) + self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_10.setSpacing(0) - self.horizontalLayout_10.setObjectName(_fromUtf8("horizontalLayout_10")) - spacerItem56 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_10.setObjectName("horizontalLayout_10") + spacerItem56 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_10.addItem(spacerItem56) - self.userRotation = QtGui.QLabel(self.userRotationPanel) - self.userRotation.setObjectName(_fromUtf8("userRotation")) + self.userRotation = QtWidgets.QLabel(self.userRotationPanel) + self.userRotation.setObjectName("userRotation") self.horizontalLayout_10.addWidget(self.userRotation) - spacerItem57 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem57 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_10.addItem(spacerItem57) self.verticalLayout_4.addWidget(self.userRotationPanel) self.horizontalLayout_2.addWidget(self.q_widget) - self.horizontalLayout_11 = QtGui.QHBoxLayout() + self.horizontalLayout_11 = QtWidgets.QHBoxLayout() self.horizontalLayout_11.setSpacing(0) - self.horizontalLayout_11.setObjectName(_fromUtf8("horizontalLayout_11")) - self.cbpanelW = QtGui.QWidget(self.centralwidget) + self.horizontalLayout_11.setObjectName("horizontalLayout_11") + self.cbpanelW = QtWidgets.QWidget(self.centralwidget) self.cbpanelW.setMaximumSize(QtCore.QSize(300, 16777215)) - self.cbpanelW.setObjectName(_fromUtf8("cbpanelW")) - self.verticalLayout_10 = QtGui.QVBoxLayout(self.cbpanelW) - self.verticalLayout_10.setMargin(0) + self.cbpanelW.setObjectName("cbpanelW") + self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.cbpanelW) + self.verticalLayout_10.setContentsMargins(0, 0, 0, 0) self.verticalLayout_10.setSpacing(0) - self.verticalLayout_10.setObjectName(_fromUtf8("verticalLayout_10")) - self.cbpanel = QtGui.QVBoxLayout() + self.verticalLayout_10.setObjectName("verticalLayout_10") + self.cbpanel = QtWidgets.QVBoxLayout() self.cbpanel.setContentsMargins(-1, 0, -1, 0) self.cbpanel.setSpacing(0) - self.cbpanel.setObjectName(_fromUtf8("cbpanel")) + self.cbpanel.setObjectName("cbpanel") self.verticalLayout_10.addLayout(self.cbpanel) self.horizontalLayout_11.addWidget(self.cbpanelW) - self.vBrain = QtGui.QHBoxLayout() - self.vBrain.setObjectName(_fromUtf8("vBrain")) + self.vBrain = QtWidgets.QHBoxLayout() + self.vBrain.setObjectName("vBrain") self.horizontalLayout_11.addLayout(self.vBrain) self.horizontalLayout_2.addLayout(self.horizontalLayout_11) MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtGui.QMenuBar(MainWindow) + self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1513, 25)) - self.menubar.setObjectName(_fromUtf8("menubar")) - self.menuFiles = QtGui.QMenu(self.menubar) - self.menuFiles.setObjectName(_fromUtf8("menuFiles")) - self.menuTransform = QtGui.QMenu(self.menubar) - self.menuTransform.setObjectName(_fromUtf8("menuTransform")) - self.menuCortical_projection = QtGui.QMenu(self.menuTransform) - self.menuCortical_projection.setObjectName(_fromUtf8("menuCortical_projection")) - self.menuDisplay = QtGui.QMenu(self.menubar) - self.menuDisplay.setObjectName(_fromUtf8("menuDisplay")) - self.menuPanel = QtGui.QMenu(self.menuDisplay) - self.menuPanel.setObjectName(_fromUtf8("menuPanel")) - self.menuHelp = QtGui.QMenu(self.menubar) - self.menuHelp.setObjectName(_fromUtf8("menuHelp")) + self.menubar.setObjectName("menubar") + self.menuFiles = QtWidgets.QMenu(self.menubar) + self.menuFiles.setObjectName("menuFiles") + self.menuTransform = QtWidgets.QMenu(self.menubar) + self.menuTransform.setObjectName("menuTransform") + self.menuCortical_projection = QtWidgets.QMenu(self.menuTransform) + self.menuCortical_projection.setObjectName("menuCortical_projection") + self.menuDisplay = QtWidgets.QMenu(self.menubar) + self.menuDisplay.setObjectName("menuDisplay") + self.menuPanel = QtWidgets.QMenu(self.menuDisplay) + self.menuPanel.setObjectName("menuPanel") + self.menuHelp = QtWidgets.QMenu(self.menubar) + self.menuHelp.setObjectName("menuHelp") MainWindow.setMenuBar(self.menubar) - self.statusbar = QtGui.QStatusBar(MainWindow) - self.statusbar.setObjectName(_fromUtf8("statusbar")) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) - self.actionSave = QtGui.QAction(MainWindow) - self.actionSave.setObjectName(_fromUtf8("actionSave")) - self.actionLoad = QtGui.QAction(MainWindow) - self.actionLoad.setObjectName(_fromUtf8("actionLoad")) - self.actionCortical_repartition = QtGui.QAction(MainWindow) - self.actionCortical_repartition.setObjectName(_fromUtf8("actionCortical_repartition")) - self.actionCortical = QtGui.QAction(MainWindow) - self.actionCortical.setObjectName(_fromUtf8("actionCortical")) - self.actionSagittal = QtGui.QAction(MainWindow) - self.actionSagittal.setObjectName(_fromUtf8("actionSagittal")) - self.actionAxial = QtGui.QAction(MainWindow) - self.actionAxial.setObjectName(_fromUtf8("actionAxial")) - self.actionCamera = QtGui.QAction(MainWindow) - self.actionCamera.setObjectName(_fromUtf8("actionCamera")) - self.actionLeft = QtGui.QAction(MainWindow) - self.actionLeft.setObjectName(_fromUtf8("actionLeft")) - self.actionRight = QtGui.QAction(MainWindow) - self.actionRight.setObjectName(_fromUtf8("actionRight")) - self.actionQuick_settings = QtGui.QAction(MainWindow) + self.actionSave = QtWidgets.QAction(MainWindow) + self.actionSave.setObjectName("actionSave") + self.actionLoad = QtWidgets.QAction(MainWindow) + self.actionLoad.setObjectName("actionLoad") + self.actionCortical_repartition = QtWidgets.QAction(MainWindow) + self.actionCortical_repartition.setObjectName("actionCortical_repartition") + self.actionCortical = QtWidgets.QAction(MainWindow) + self.actionCortical.setObjectName("actionCortical") + self.actionSagittal = QtWidgets.QAction(MainWindow) + self.actionSagittal.setObjectName("actionSagittal") + self.actionAxial = QtWidgets.QAction(MainWindow) + self.actionAxial.setObjectName("actionAxial") + self.actionCamera = QtWidgets.QAction(MainWindow) + self.actionCamera.setObjectName("actionCamera") + self.actionLeft = QtWidgets.QAction(MainWindow) + self.actionLeft.setObjectName("actionLeft") + self.actionRight = QtWidgets.QAction(MainWindow) + self.actionRight.setObjectName("actionRight") + self.actionQuick_settings = QtWidgets.QAction(MainWindow) self.actionQuick_settings.setCheckable(True) - self.actionQuick_settings.setObjectName(_fromUtf8("actionQuick_settings")) - self.actionClose = QtGui.QAction(MainWindow) - self.actionClose.setObjectName(_fromUtf8("actionClose")) - self.actionProjection = QtGui.QAction(MainWindow) - self.actionProjection.setObjectName(_fromUtf8("actionProjection")) - self.actionRepartition = QtGui.QAction(MainWindow) - self.actionRepartition.setObjectName(_fromUtf8("actionRepartition")) - self.actionShortcuts = QtGui.QAction(MainWindow) + self.actionQuick_settings.setObjectName("actionQuick_settings") + self.actionClose = QtWidgets.QAction(MainWindow) + self.actionClose.setObjectName("actionClose") + self.actionProjection = QtWidgets.QAction(MainWindow) + self.actionProjection.setObjectName("actionProjection") + self.actionRepartition = QtWidgets.QAction(MainWindow) + self.actionRepartition.setObjectName("actionRepartition") + self.actionShortcuts = QtWidgets.QAction(MainWindow) self.actionShortcuts.setCheckable(True) - self.actionShortcuts.setObjectName(_fromUtf8("actionShortcuts")) - self.actionUi_settings = QtGui.QAction(MainWindow) + self.actionShortcuts.setObjectName("actionShortcuts") + self.actionUi_settings = QtWidgets.QAction(MainWindow) self.actionUi_settings.setCheckable(True) self.actionUi_settings.setChecked(False) - self.actionUi_settings.setObjectName(_fromUtf8("actionUi_settings")) - self.actionMNI = QtGui.QAction(MainWindow) + self.actionUi_settings.setObjectName("actionUi_settings") + self.actionMNI = QtWidgets.QAction(MainWindow) self.actionMNI.setCheckable(True) - self.actionMNI.setObjectName(_fromUtf8("actionMNI")) - self.actionSources = QtGui.QAction(MainWindow) + self.actionMNI.setObjectName("actionMNI") + self.actionSources = QtWidgets.QAction(MainWindow) self.actionSources.setCheckable(True) - self.actionSources.setObjectName(_fromUtf8("actionSources")) - self.actionConnectivity = QtGui.QAction(MainWindow) + self.actionSources.setObjectName("actionSources") + self.actionConnectivity = QtWidgets.QAction(MainWindow) self.actionConnectivity.setCheckable(True) - self.actionConnectivity.setObjectName(_fromUtf8("actionConnectivity")) - self.actionColormap = QtGui.QAction(MainWindow) + self.actionConnectivity.setObjectName("actionConnectivity") + self.actionColormap = QtWidgets.QAction(MainWindow) self.actionColormap.setCheckable(True) - self.actionColormap.setObjectName(_fromUtf8("actionColormap")) - self.actionShortcut = QtGui.QAction(MainWindow) - self.actionShortcut.setObjectName(_fromUtf8("actionShortcut")) - self.actionDocumentation = QtGui.QAction(MainWindow) - self.actionDocumentation.setObjectName(_fromUtf8("actionDocumentation")) - self.actionScreenshot = QtGui.QAction(MainWindow) - self.actionScreenshot.setObjectName(_fromUtf8("actionScreenshot")) - self.actionExit = QtGui.QAction(MainWindow) - self.actionExit.setObjectName(_fromUtf8("actionExit")) + self.actionColormap.setObjectName("actionColormap") + self.actionShortcut = QtWidgets.QAction(MainWindow) + self.actionShortcut.setObjectName("actionShortcut") + self.actionDocumentation = QtWidgets.QAction(MainWindow) + self.actionDocumentation.setObjectName("actionDocumentation") + self.actionScreenshot = QtWidgets.QAction(MainWindow) + self.actionScreenshot.setObjectName("actionScreenshot") + self.actionExit = QtWidgets.QAction(MainWindow) + self.actionExit.setObjectName("actionExit") self.menuFiles.addAction(self.actionScreenshot) self.menuFiles.addSeparator() self.menuFiles.addAction(self.actionExit) @@ -2036,291 +2032,302 @@ def setupUi(self, MainWindow): MainWindow.setTabOrder(self.bgd_red, self.QuickSettings) def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(_translate("MainWindow", "Brain", None)) - self.QuickSettings.setToolTip(_translate("MainWindow", "


", None)) - self.groupBox_8.setTitle(_translate("MainWindow", "Rotation / Camera", None)) - self.q_axial.setToolTip(_translate("MainWindow", "

Click twice to see top / bottom

", None)) - self.q_axial.setText(_translate("MainWindow", "Axial", None)) - self.c_Turnable.setToolTip(_translate("MainWindow", "

Turntable camera :

- Use mouse-wheel to zoom in / out

- Click and move to rotate the brain.

", None)) - self.c_Turnable.setText(_translate("MainWindow", "Turntable", None)) - self.c_Fly.setToolTip(_translate("MainWindow", "

Deep camera. Use :

- j : look to the left

- l : look to the right

- i : look above

- k : look below

- f : move above

- c : move below

- a : move to the left

- d : move to the right

- w : move forward

- s : move backward

- e : rotate to the right

- q : rotate to the left

", None)) - self.c_Fly.setText(_translate("MainWindow", "Fly", None)) - self.q_sagittal.setToolTip(_translate("MainWindow", "

Click twice to see left / right

", None)) - self.q_sagittal.setText(_translate("MainWindow", "Sagittal", None)) - self.label_111.setText(_translate("MainWindow", "Camera", None)) - self.label_110.setText(_translate("MainWindow", "Rotation", None)) - self.q_coronal.setToolTip(_translate("MainWindow", "

Click twice to see front / back

", None)) - self.q_coronal.setText(_translate("MainWindow", "Coronal", None)) - self.groupBox_37.setTitle(_translate("MainWindow", "Opacity / Slices", None)) - self.o_Sources.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto sources

", None)) - self.o_Sources.setText(_translate("MainWindow", "Sources", None)) - self.o_Brain.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto the brain

", None)) - self.o_Brain.setText(_translate("MainWindow", "Brain", None)) - self.o_Connect.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto connectivity lines

", None)) - self.o_Connect.setText(_translate("MainWindow", "Connectivity", None)) - self.o_Text.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto source\'s text

", None)) - self.o_Text.setText(_translate("MainWindow", "Text", None)) - self.label_73.setText(_translate("MainWindow", "Select objects to control", None)) - self.o_Areas.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto ROI

", None)) - self.o_Areas.setText(_translate("MainWindow", "ROI", None)) - self.label_4.setText(_translate("MainWindow", "1", None)) - self.OpacitySlider.setToolTip(_translate("MainWindow", "

Change opacity on selected objects above

", None)) - self.label_3.setText(_translate("MainWindow", "0", None)) - self.frame_2.setToolTip(_translate("MainWindow", "

Change opacity on selected objects above

", None)) - self.label_74.setText(_translate("MainWindow", "Opacity slider", None)) - self.ySlices_2.setToolTip(_translate("MainWindow", "

Slice along y-axis : Back -> Front

", None)) - self.xSlices.setToolTip(_translate("MainWindow", "

Slice along x-axis : Left <- Right

", None)) - self.label_8.setText(_translate("MainWindow", "z-axis", None)) - self.ySlices.setToolTip(_translate("MainWindow", "

Slice along y-axis : Back <- Front

", None)) - self.label_6.setText(_translate("MainWindow", "x-axis", None)) - self.zSlices.setToolTip(_translate("MainWindow", "

Slice along z-axis : Bottom <- Top

", None)) - self.label_7.setText(_translate("MainWindow", "y-axis", None)) - self.zSlices_2.setToolTip(_translate("MainWindow", "

Slice along z-axis : Bottom -> Top

", None)) - self.xSlices_2.setToolTip(_translate("MainWindow", "

Slice along x-axis : Left -> Right

", None)) - self.frame_3.setToolTip(_translate("MainWindow", "

Take slice of selected objects above

", None)) - self.label_75.setText(_translate("MainWindow", "Slices", None)) - self.toolBox_3.setItemText(self.toolBox_3.indexOf(self.page), _translate("MainWindow", "Rotation // Opacity // Slice", None)) - self.groupBox_3.setTitle(_translate("MainWindow", "Interface", None)) + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "Brain")) + self.QuickSettings.setToolTip(_translate("MainWindow", "


")) + self.groupBox_8.setTitle(_translate("MainWindow", "Rotation / Camera")) + self.q_axial.setToolTip(_translate("MainWindow", "

Click twice to see top / bottom

")) + self.q_axial.setText(_translate("MainWindow", "Axial")) + self.c_Turnable.setToolTip(_translate("MainWindow", "

Turntable camera :

- Use mouse-wheel to zoom in / out

- Click and move to rotate the brain.

")) + self.c_Turnable.setText(_translate("MainWindow", "Turntable")) + self.c_Fly.setToolTip(_translate("MainWindow", "

Deep camera. Use :

- j : look to the left

- l : look to the right

- i : look above

- k : look below

- f : move above

- c : move below

- a : move to the left

- d : move to the right

- w : move forward

- s : move backward

- e : rotate to the right

- q : rotate to the left

")) + self.c_Fly.setText(_translate("MainWindow", "Fly")) + self.q_sagittal.setToolTip(_translate("MainWindow", "

Click twice to see left / right

")) + self.q_sagittal.setText(_translate("MainWindow", "Sagittal")) + self.label_111.setText(_translate("MainWindow", "Camera")) + self.label_110.setText(_translate("MainWindow", "Rotation")) + self.q_coronal.setToolTip(_translate("MainWindow", "

Click twice to see front / back

")) + self.q_coronal.setText(_translate("MainWindow", "Coronal")) + self.groupBox_37.setTitle(_translate("MainWindow", "Opacity / Slices")) + self.o_Sources.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto sources

")) + self.o_Sources.setText(_translate("MainWindow", "Sources")) + self.o_Brain.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto the brain

")) + self.o_Brain.setText(_translate("MainWindow", "Brain")) + self.o_Connect.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto connectivity lines

")) + self.o_Connect.setText(_translate("MainWindow", "Connectivity")) + self.o_Text.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto source\'s text

")) + self.o_Text.setText(_translate("MainWindow", "Text")) + self.label_73.setText(_translate("MainWindow", "Select objects to control")) + self.o_Areas.setToolTip(_translate("MainWindow", "

Apply opacity / slices onto ROI

")) + self.o_Areas.setText(_translate("MainWindow", "ROI")) + self.label_4.setText(_translate("MainWindow", "1")) + self.OpacitySlider.setToolTip(_translate("MainWindow", "

Change opacity on selected objects above

")) + self.label_3.setText(_translate("MainWindow", "0")) + self.frame_2.setToolTip(_translate("MainWindow", "

Change opacity on selected objects above

")) + self.label_74.setText(_translate("MainWindow", "Opacity slider")) + self.ySlices_2.setToolTip(_translate("MainWindow", "

Slice along y-axis : Back -> Front

")) + self.xSlices.setToolTip(_translate("MainWindow", "

Slice along x-axis : Left <- Right

")) + self.label_8.setText(_translate("MainWindow", "z-axis")) + self.ySlices.setToolTip(_translate("MainWindow", "

Slice along y-axis : Back <- Front

")) + self.label_6.setText(_translate("MainWindow", "x-axis")) + self.zSlices.setToolTip(_translate("MainWindow", "

Slice along z-axis : Bottom <- Top

")) + self.label_7.setText(_translate("MainWindow", "y-axis")) + self.zSlices_2.setToolTip(_translate("MainWindow", "

Slice along z-axis : Bottom -> Top

")) + self.xSlices_2.setToolTip(_translate("MainWindow", "

Slice along x-axis : Left -> Right

")) + self.frame_3.setToolTip(_translate("MainWindow", "

Take slice of selected objects above

")) + self.label_75.setText(_translate("MainWindow", "Slices")) + self.toolBox_3.setItemText(self.toolBox_3.indexOf(self.page), _translate("MainWindow", "Rotation // Opacity // Slice")) + self.groupBox_3.setTitle(_translate("MainWindow", "Interface")) self.label.setText(_translate("MainWindow", "Background\n" -"color", None)) - self.bgd_blue.setToolTip(_translate("MainWindow", "

Blue

", None)) - self.bgd_red.setToolTip(_translate("MainWindow", "

Red

", None)) - self.bgd_green.setToolTip(_translate("MainWindow", "

Green

", None)) - self.groupBox.setTitle(_translate("MainWindow", "Screenshot", None)) - self._ssAutoCrop.setText(_translate("MainWindow", "Auto-crop", None)) - self._ssSaveAs.setText(_translate("MainWindow", "brain", None)) - self.label_39.setText(_translate("MainWindow", "Save as", None)) - self.label_40.setText(_translate("MainWindow", "Resolution", None)) - self._ssSaveAsExt.setItemText(0, _translate("MainWindow", ".png", None)) - self._ssSaveAsExt.setItemText(1, _translate("MainWindow", ".jpg", None)) - self._ssSaveAsExt.setItemText(2, _translate("MainWindow", ".tiff", None)) - self._ssCbEnable.setText(_translate("MainWindow", "Export the colorbar", None)) - self._ssCropEnable.setText(_translate("MainWindow", "Crop", None)) - self._ssGuide.setText(_translate("MainWindow", "Guidelines", None)) - self._ssRun.setText(_translate("MainWindow", "Run", None)) - self.toolBox_3.setItemText(self.toolBox_3.indexOf(self.page_2), _translate("MainWindow", "GUI // Screenshot", None)) - self.groupBox_5.setTitle(_translate("MainWindow", "Light", None)) - self.label_34.setText(_translate("MainWindow", "Color", None)) - self.label_13.setText(_translate("MainWindow", "Specular", None)) - self.label_35.setText(_translate("MainWindow", "Coef", None)) - self.uil_colR.setToolTip(_translate("MainWindow", "

Red

", None)) - self.label_9.setText(_translate("MainWindow", "Ambient", None)) - self.label_36.setText(_translate("MainWindow", "Intensity", None)) - self.uil_intX.setToolTip(_translate("MainWindow", "

Along x-axis

", None)) - self.uil_intY.setToolTip(_translate("MainWindow", "

Along y-axis

", None)) - self.uil_intZ.setToolTip(_translate("MainWindow", "

Along z-axis

", None)) - self.uil_colG.setToolTip(_translate("MainWindow", "

Green

", None)) - self.uil_AmbCoef.setToolTip(_translate("MainWindow", "

Make the full brain brighter / darker

", None)) - self.uil_SpecCoef.setToolTip(_translate("MainWindow", "

Add shiny effect

", None)) - self.label_33.setText(_translate("MainWindow", "Position", None)) - self.uil_posX.setToolTip(_translate("MainWindow", "

Along x-axis

", None)) - self.uil_posY.setToolTip(_translate("MainWindow", "

Along y-axis

", None)) - self.uil_posZ.setToolTip(_translate("MainWindow", "

Along z-axis

", None)) - self.uil_colB.setToolTip(_translate("MainWindow", "

Blue

", None)) - self.uil_colA.setToolTip(_translate("MainWindow", "

Alpha

", None)) - self.toolBox_3.setItemText(self.toolBox_3.indexOf(self.page_3), _translate("MainWindow", "Light", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_UI), _translate("MainWindow", "Settings", None)) - self.q_MNI.setToolTip(_translate("MainWindow", "


", None)) - self.show_MNI.setToolTip(_translate("MainWindow", "

Display / Hide the brain (shortcut 4)

", None)) - self.show_MNI.setText(_translate("MainWindow", "Show", None)) - self.toolBox_2.setTitle(_translate("MainWindow", "Display", None)) +"color")) + self.bgd_blue.setToolTip(_translate("MainWindow", "

Blue

")) + self.bgd_red.setToolTip(_translate("MainWindow", "

Red

")) + self.bgd_green.setToolTip(_translate("MainWindow", "

Green

")) + self.groupBox.setTitle(_translate("MainWindow", "Screenshot")) + self._ssAutoCrop.setText(_translate("MainWindow", "Auto-crop")) + self._ssSaveAs.setText(_translate("MainWindow", "brain")) + self.label_39.setText(_translate("MainWindow", "Save as")) + self.label_40.setText(_translate("MainWindow", "Resolution")) + self._ssSaveAsExt.setItemText(0, _translate("MainWindow", ".png")) + self._ssSaveAsExt.setItemText(1, _translate("MainWindow", ".jpg")) + self._ssSaveAsExt.setItemText(2, _translate("MainWindow", ".tiff")) + self._ssCbEnable.setText(_translate("MainWindow", "Export the colorbar")) + self._ssCropEnable.setText(_translate("MainWindow", "Crop")) + self._ssGuide.setText(_translate("MainWindow", "Guidelines")) + self._ssRun.setText(_translate("MainWindow", "Run")) + self.toolBox_3.setItemText(self.toolBox_3.indexOf(self.page_2), _translate("MainWindow", "GUI // Screenshot")) + self.groupBox_5.setTitle(_translate("MainWindow", "Light")) + self.label_34.setText(_translate("MainWindow", "Color")) + self.label_13.setText(_translate("MainWindow", "Specular")) + self.label_35.setText(_translate("MainWindow", "Coef")) + self.uil_colR.setToolTip(_translate("MainWindow", "

Red

")) + self.label_9.setText(_translate("MainWindow", "Ambient")) + self.label_36.setText(_translate("MainWindow", "Intensity")) + self.uil_intX.setToolTip(_translate("MainWindow", "

Along x-axis

")) + self.uil_intY.setToolTip(_translate("MainWindow", "

Along y-axis

")) + self.uil_intZ.setToolTip(_translate("MainWindow", "

Along z-axis

")) + self.uil_colG.setToolTip(_translate("MainWindow", "

Green

")) + self.uil_AmbCoef.setToolTip(_translate("MainWindow", "

Make the full brain brighter / darker

")) + self.uil_SpecCoef.setToolTip(_translate("MainWindow", "

Add shiny effect

")) + self.label_33.setText(_translate("MainWindow", "Position")) + self.uil_posX.setToolTip(_translate("MainWindow", "

Along x-axis

")) + self.uil_posY.setToolTip(_translate("MainWindow", "

Along y-axis

")) + self.uil_posZ.setToolTip(_translate("MainWindow", "

Along z-axis

")) + self.uil_colB.setToolTip(_translate("MainWindow", "

Blue

")) + self.uil_colA.setToolTip(_translate("MainWindow", "

Alpha

")) + self.toolBox_3.setItemText(self.toolBox_3.indexOf(self.page_3), _translate("MainWindow", "Light")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_UI), _translate("MainWindow", "Settings")) + self.q_MNI.setToolTip(_translate("MainWindow", "


")) + self.show_MNI.setToolTip(_translate("MainWindow", "

Display / Hide the brain (shortcut 4)

")) + self.show_MNI.setText(_translate("MainWindow", "Show")) + self.toolBox_2.setTitle(_translate("MainWindow", "Display")) self.label_25.setText(_translate("MainWindow", "Light \n" -"refllection", None)) - self.label_26.setText(_translate("MainWindow", "Template", None)) - self.label_19.setText(_translate("MainWindow", "Hemisphere", None)) - self.q_internal.setToolTip(_translate("MainWindow", "

Make the brain transparent (shortcut 3)

", None)) - self.q_internal.setText(_translate("MainWindow", "Internal", None)) - self.q_external.setToolTip(_translate("MainWindow", "

Make the brain opaque (shortcut 3)

", None)) - self.q_external.setText(_translate("MainWindow", "External", None)) - self.uiSwitchTemplate.setToolTip(_translate("MainWindow", "

Use several brain templates

", None)) - self.uiSwitchTemplate.setItemText(0, _translate("MainWindow", "B1", None)) - self.uiSwitchTemplate.setItemText(1, _translate("MainWindow", "B2", None)) - self.uiSwitchTemplate.setItemText(2, _translate("MainWindow", "B3", None)) - self.Lhemi_only.setToolTip(_translate("MainWindow", "

Display only the left hemisphere

", None)) - self.Lhemi_only.setText(_translate("MainWindow", "Left", None)) - self.Both_only.setToolTip(_translate("MainWindow", "

Display both hemispheres

", None)) - self.Both_only.setText(_translate("MainWindow", "Both", None)) - self.Rhemi_only.setToolTip(_translate("MainWindow", "

Display only the right hemisphere

", None)) - self.Rhemi_only.setText(_translate("MainWindow", "Right", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_MNI), _translate("MainWindow", "Brain", None)) - self.show_Sources.setToolTip(_translate("MainWindow", "

Display / Hide sources (shortcut 5)

", None)) - self.show_Sources.setText(_translate("MainWindow", "Show sources", None)) - self.q_stextshow.setToolTip(_translate("MainWindow", "

Display / Hide source\'s text (if defined)

", None)) - self.q_stextshow.setText(_translate("MainWindow", "Show text", None)) - self.toolBox.setTitle(_translate("MainWindow", "Display", None)) - self.s_EdgeWidth.setToolTip(_translate("MainWindow", "

Edge width

", None)) - self.s_uiNone.setToolTip(_translate("MainWindow", "

Hide all sources

", None)) - self.s_uiNone.setText(_translate("MainWindow", "None", None)) - self.label_32.setText(_translate("MainWindow", "Radius", None)) - self.label_28.setText(_translate("MainWindow", "Symbol", None)) - self.s_LeftH.setToolTip(_translate("MainWindow", "

Display sources in the left hemisphere

", None)) - self.s_LeftH.setText(_translate("MainWindow", "Left", None)) - self.s_RightH.setToolTip(_translate("MainWindow", "

Display sources in the right hemisphere

", None)) - self.s_RightH.setText(_translate("MainWindow", "Right", None)) - self.s_uiAll.setToolTip(_translate("MainWindow", "

Display all sources

", None)) - self.s_uiAll.setText(_translate("MainWindow", "All", None)) - self.s_Outside.setToolTip(_translate("MainWindow", "

Display sources outside the brain (EXPERIMENTAL)

", None)) - self.s_Outside.setText(_translate("MainWindow", "Outside", None)) - self.label_27.setText(_translate("MainWindow", "Select", None)) - self.s_Inside.setToolTip(_translate("MainWindow", "

Display sources inside the brain (EXPERIMENTAL)

", None)) - self.s_Inside.setText(_translate("MainWindow", "Inside", None)) - self.s_Symbol.setToolTip(_translate("MainWindow", "

Change sources symbol

", None)) - self.s_Symbol.setItemText(0, _translate("MainWindow", "disc", None)) - self.s_Symbol.setItemText(1, _translate("MainWindow", "arrow", None)) - self.s_Symbol.setItemText(2, _translate("MainWindow", "ring", None)) - self.s_Symbol.setItemText(3, _translate("MainWindow", "clobber", None)) - self.s_Symbol.setItemText(4, _translate("MainWindow", "square", None)) - self.s_Symbol.setItemText(5, _translate("MainWindow", "diamond", None)) - self.s_Symbol.setItemText(6, _translate("MainWindow", "vbar", None)) - self.s_Symbol.setItemText(7, _translate("MainWindow", "hbar", None)) - self.s_Symbol.setItemText(8, _translate("MainWindow", "cross", None)) - self.s_Symbol.setItemText(9, _translate("MainWindow", "tailed_arrow", None)) - self.s_Symbol.setItemText(10, _translate("MainWindow", "x", None)) - self.s_Symbol.setItemText(11, _translate("MainWindow", "triangle_up", None)) - self.s_Symbol.setItemText(12, _translate("MainWindow", "triangle_down", None)) - self.label_20.setText(_translate("MainWindow", "Width", None)) - self.s_EdgeColor.setToolTip(_translate("MainWindow", "

Edge color (if edge width is not 0.)

", None)) - self.label_17.setText(_translate("MainWindow", "Color", None)) - self.label_31.setText(_translate("MainWindow", "Edge", None)) - self.s_radiusMin.setToolTip(_translate("MainWindow", "

Minimum radius for the sources

", None)) - self.s_radiusMax.setToolTip(_translate("MainWindow", "

Maximum radius for the sources

", None)) - self.label_114.setText(_translate("MainWindow", "Zoom", None)) - self.s_Scaling.setToolTip(_translate("MainWindow", "

Set if sources have to be rescaled on zoom (you will need to change the minimum & maximum radius)

", None)) - self.s_Scaling.setText(_translate("MainWindow", "Scale", None)) - self.grpText.setTitle(_translate("MainWindow", "Text", None)) - self.label_12.setText(_translate("MainWindow", "Fontsize", None)) - self.label_29.setText(_translate("MainWindow", "Properties", None)) - self.q_stextcolor.setToolTip(_translate("MainWindow", "

Font color of source\'s text

", None)) - self.y_text.setToolTip(_translate("MainWindow", "

Move source\'s text along y-axis

", None)) - self.label_14.setText(_translate("MainWindow", "Color", None)) - self.x_text.setToolTip(_translate("MainWindow", "

Move source\'s text along x-axis

", None)) - self.z_text.setToolTip(_translate("MainWindow", "

Move source\'s text along z-axis

", None)) - self.label_30.setText(_translate("MainWindow", "(x, y, z)", None)) - self.groupBox_6.setTitle(_translate("MainWindow", "Projection", None)) - self.label_15.setText(_translate("MainWindow", "Radius", None)) - self._uitRadius.setToolTip(_translate("MainWindow", "

Radius for the cortical projection / repartition. Every vertices arround each sources comprised in a sphere of radius "Radius" will be considered in the projection.

", None)) +"refllection")) + self.label_26.setText(_translate("MainWindow", "Template")) + self.label_19.setText(_translate("MainWindow", "Hemisphere")) + self.q_internal.setToolTip(_translate("MainWindow", "

Make the brain transparent (shortcut 3)

")) + self.q_internal.setText(_translate("MainWindow", "Internal")) + self.q_external.setToolTip(_translate("MainWindow", "

Make the brain opaque (shortcut 3)

")) + self.q_external.setText(_translate("MainWindow", "External")) + self.uiSwitchTemplate.setToolTip(_translate("MainWindow", "

Use several brain templates

")) + self.uiSwitchTemplate.setItemText(0, _translate("MainWindow", "B1")) + self.uiSwitchTemplate.setItemText(1, _translate("MainWindow", "B2")) + self.uiSwitchTemplate.setItemText(2, _translate("MainWindow", "B3")) + self.Lhemi_only.setToolTip(_translate("MainWindow", "

Display only the left hemisphere

")) + self.Lhemi_only.setText(_translate("MainWindow", "Left")) + self.Both_only.setToolTip(_translate("MainWindow", "

Display both hemispheres

")) + self.Both_only.setText(_translate("MainWindow", "Both")) + self.Rhemi_only.setToolTip(_translate("MainWindow", "

Display only the right hemisphere

")) + self.Rhemi_only.setText(_translate("MainWindow", "Right")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_MNI), _translate("MainWindow", "Brain")) + self.show_Sources.setToolTip(_translate("MainWindow", "

Display / Hide sources (shortcut 5)

")) + self.show_Sources.setText(_translate("MainWindow", "Show sources")) + self.q_stextshow.setToolTip(_translate("MainWindow", "

Display / Hide source\'s text (if defined)

")) + self.q_stextshow.setText(_translate("MainWindow", "Show text")) + self.toolBox.setTitle(_translate("MainWindow", "Display")) + self.s_EdgeWidth.setToolTip(_translate("MainWindow", "

Edge width

")) + self.s_uiNone.setToolTip(_translate("MainWindow", "

Hide all sources

")) + self.s_uiNone.setText(_translate("MainWindow", "None")) + self.label_32.setText(_translate("MainWindow", "Radius")) + self.label_28.setText(_translate("MainWindow", "Symbol")) + self.s_LeftH.setToolTip(_translate("MainWindow", "

Display sources in the left hemisphere

")) + self.s_LeftH.setText(_translate("MainWindow", "Left")) + self.s_RightH.setToolTip(_translate("MainWindow", "

Display sources in the right hemisphere

")) + self.s_RightH.setText(_translate("MainWindow", "Right")) + self.s_uiAll.setToolTip(_translate("MainWindow", "

Display all sources

")) + self.s_uiAll.setText(_translate("MainWindow", "All")) + self.s_Outside.setToolTip(_translate("MainWindow", "

Display sources outside the brain (EXPERIMENTAL)

")) + self.s_Outside.setText(_translate("MainWindow", "Outside")) + self.label_27.setText(_translate("MainWindow", "Select")) + self.s_Inside.setToolTip(_translate("MainWindow", "

Display sources inside the brain (EXPERIMENTAL)

")) + self.s_Inside.setText(_translate("MainWindow", "Inside")) + self.s_Symbol.setToolTip(_translate("MainWindow", "

Change sources symbol

")) + self.s_Symbol.setItemText(0, _translate("MainWindow", "disc")) + self.s_Symbol.setItemText(1, _translate("MainWindow", "arrow")) + self.s_Symbol.setItemText(2, _translate("MainWindow", "ring")) + self.s_Symbol.setItemText(3, _translate("MainWindow", "clobber")) + self.s_Symbol.setItemText(4, _translate("MainWindow", "square")) + self.s_Symbol.setItemText(5, _translate("MainWindow", "diamond")) + self.s_Symbol.setItemText(6, _translate("MainWindow", "vbar")) + self.s_Symbol.setItemText(7, _translate("MainWindow", "hbar")) + self.s_Symbol.setItemText(8, _translate("MainWindow", "cross")) + self.s_Symbol.setItemText(9, _translate("MainWindow", "tailed_arrow")) + self.s_Symbol.setItemText(10, _translate("MainWindow", "x")) + self.s_Symbol.setItemText(11, _translate("MainWindow", "triangle_up")) + self.s_Symbol.setItemText(12, _translate("MainWindow", "triangle_down")) + self.label_20.setText(_translate("MainWindow", "Width")) + self.s_EdgeColor.setToolTip(_translate("MainWindow", "

Edge color (if edge width is not 0.)

")) + self.label_17.setText(_translate("MainWindow", "Color")) + self.label_31.setText(_translate("MainWindow", "Edge")) + self.s_radiusMin.setToolTip(_translate("MainWindow", "

Minimum radius for the sources

")) + self.s_radiusMax.setToolTip(_translate("MainWindow", "

Maximum radius for the sources

")) + self.label_114.setText(_translate("MainWindow", "Zoom")) + self.s_Scaling.setToolTip(_translate("MainWindow", "

Set if sources have to be rescaled on zoom (you will need to change the minimum & maximum radius)

")) + self.s_Scaling.setText(_translate("MainWindow", "Scale")) + self.grpText.setTitle(_translate("MainWindow", "Text")) + self.label_12.setText(_translate("MainWindow", "Fontsize")) + self.label_29.setText(_translate("MainWindow", "Properties")) + self.q_stextcolor.setToolTip(_translate("MainWindow", "

Font color of source\'s text

")) + self.y_text.setToolTip(_translate("MainWindow", "

Move source\'s text along y-axis

")) + self.label_14.setText(_translate("MainWindow", "Color")) + self.x_text.setToolTip(_translate("MainWindow", "

Move source\'s text along x-axis

")) + self.z_text.setToolTip(_translate("MainWindow", "

Move source\'s text along z-axis

")) + self.label_30.setText(_translate("MainWindow", "(x, y, z)")) + self.groupBox_6.setTitle(_translate("MainWindow", "Projection")) + self.label_15.setText(_translate("MainWindow", "Radius")) + self._uitRadius.setToolTip(_translate("MainWindow", "

Radius for the cortical projection / repartition. Every vertices arround each sources comprised in a sphere of radius "Radius" will be considered in the projection.

")) self.label_115.setText(_translate("MainWindow", "Projection\n" -"type", None)) - self.label_116.setText(_translate("MainWindow", "Project on", None)) - self._uitActivity.setToolTip(_translate("MainWindow", "

Project the source\'s activity

", None)) - self._uitActivity.setText(_translate("MainWindow", "Activity", None)) - self._uitRepartition.setToolTip(_translate("MainWindow", "

Get the number of contributing sources per vertex

", None)) - self._uitRepartition.setText(_translate("MainWindow", "Repartition", None)) - self._uitProjectOn.setToolTip(_translate("MainWindow", "

Project source\'s activity / repartition either on the surface of :

- The brain

- ROI (if a ROI is displayed)

", None)) - self._uitProjectOn.setItemText(0, _translate("MainWindow", "Brain", None)) - self._uitProjectOn.setItemText(1, _translate("MainWindow", "ROI", None)) - self._uitContribute.setToolTip(_translate("MainWindow", "

If contribute is checked, the projection of a source can contribute to both hemisphere. If it\'s not checked, the projection is only performed on the hemisphere it belong to. If the source is perfectly centered (like Cz), the projection is forced to be on both hemisphere.

", None)) - self._uitContribute.setText(_translate("MainWindow", "Contribute", None)) - self._uitApply.setToolTip(_translate("MainWindow", "

Run the source\'s projection using above parameters

", None)) - self._uitApply.setText(_translate("MainWindow", "Apply", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_SOURCES), _translate("MainWindow", "Sources", None)) - self.uiConnectShow.setToolTip(_translate("MainWindow", "

Display / Hide connectivity lines (shortcut 6)

", None)) - self.uiConnectShow.setText(_translate("MainWindow", "Show", None)) - self.toolBox_5.setTitle(_translate("MainWindow", "Settings", None)) - self.uiConnect_static.setToolTip(_translate("MainWindow", "

Static color : all connectivity lines have the same transparency

", None)) - self.uiConnect_static.setText(_translate("MainWindow", "Static", None)) - self.uiConnect_dynamic.setToolTip(_translate("MainWindow", "

Dynamic color : the transparency of connectivity lines depend of connectivity strength. The stronger is the connexion, the more opaque the line will be.

", None)) - self.uiConnect_dynamic.setText(_translate("MainWindow", "Dynamic", None)) - self.label_23.setText(_translate("MainWindow", "Min", None)) - self.uiConnect_dynMin.setToolTip(_translate("MainWindow", "

Minimum opacity for the weaker connexions

", None)) - self.label_24.setText(_translate("MainWindow", "Max", None)) - self.uiConnect_dynMax.setToolTip(_translate("MainWindow", "

MAximum opacity for the stronger connexions

", None)) - self.uiConnect_colorby.setToolTip(_translate("MainWindow", "

Color connectivity line according to :

- Their connectivity strength

- The number of connections per node

- The line density (use the radius to control the density)

", None)) - self.uiConnect_colorby.setItemText(0, _translate("MainWindow", "strength", None)) - self.uiConnect_colorby.setItemText(1, _translate("MainWindow", "count", None)) - self.uiConnect_colorby.setItemText(2, _translate("MainWindow", "density", None)) - self.uiConnect_lw.setToolTip(_translate("MainWindow", "

Connectivity line width

", None)) - self.label_21.setText(_translate("MainWindow", "By", None)) +"type")) + self.label_116.setText(_translate("MainWindow", "Project on")) + self._uitActivity.setToolTip(_translate("MainWindow", "

Project the source\'s activity

")) + self._uitActivity.setText(_translate("MainWindow", "Activity")) + self._uitRepartition.setToolTip(_translate("MainWindow", "

Get the number of contributing sources per vertex

")) + self._uitRepartition.setText(_translate("MainWindow", "Repartition")) + self._uitProjectOn.setToolTip(_translate("MainWindow", "

Project source\'s activity / repartition either on the surface of :

- The brain

- ROI (if a ROI is displayed)

")) + self._uitProjectOn.setItemText(0, _translate("MainWindow", "Brain")) + self._uitProjectOn.setItemText(1, _translate("MainWindow", "ROI")) + self._uitContribute.setToolTip(_translate("MainWindow", "

If contribute is checked, the projection of a source can contribute to both hemisphere. If it\'s not checked, the projection is only performed on the hemisphere it belong to. If the source is perfectly centered (like Cz), the projection is forced to be on both hemisphere.

")) + self._uitContribute.setText(_translate("MainWindow", "Contribute")) + self._uitApply.setToolTip(_translate("MainWindow", "

Run the source\'s projection using above parameters

")) + self._uitApply.setText(_translate("MainWindow", "Apply")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_SOURCES), _translate("MainWindow", "Sources")) + self.uiConnectShow.setToolTip(_translate("MainWindow", "

Display / Hide connectivity lines (shortcut 6)

")) + self.uiConnectShow.setText(_translate("MainWindow", "Show")) + self.toolBox_5.setTitle(_translate("MainWindow", "Settings")) + self.uiConnect_static.setToolTip(_translate("MainWindow", "

Static color : all connectivity lines have the same transparency

")) + self.uiConnect_static.setText(_translate("MainWindow", "Static")) + self.uiConnect_dynamic.setToolTip(_translate("MainWindow", "

Dynamic color : the transparency of connectivity lines depend of connectivity strength. The stronger is the connexion, the more opaque the line will be.

")) + self.uiConnect_dynamic.setText(_translate("MainWindow", "Dynamic")) + self.label_23.setText(_translate("MainWindow", "Min")) + self.uiConnect_dynMin.setToolTip(_translate("MainWindow", "

Minimum opacity for the weaker connexions

")) + self.label_24.setText(_translate("MainWindow", "Max")) + self.uiConnect_dynMax.setToolTip(_translate("MainWindow", "

MAximum opacity for the stronger connexions

")) + self.uiConnect_colorby.setToolTip(_translate("MainWindow", "

Color connectivity line according to :

- Their connectivity strength

- The number of connections per node

- The line density (use the radius to control the density)

")) + self.uiConnect_colorby.setItemText(0, _translate("MainWindow", "strength")) + self.uiConnect_colorby.setItemText(1, _translate("MainWindow", "count")) + self.uiConnect_colorby.setItemText(2, _translate("MainWindow", "density")) + self.uiConnect_lw.setToolTip(_translate("MainWindow", "

Connectivity line width

")) + self.label_21.setText(_translate("MainWindow", "By")) self.label_22.setText(_translate("MainWindow", "Line\n" -"width", None)) - self.label_109.setText(_translate("MainWindow", "Color", None)) - self.label_5.setText(_translate("MainWindow", "Radius", None)) - self.toolBox_6.setTitle(_translate("MainWindow", "Bundling", None)) - self._conBlEnable.setText(_translate("MainWindow", "Enable", None)) - self.label_37.setText(_translate("MainWindow", "Radius", None)) - self.label_38.setText(_translate("MainWindow", "dxyz", None)) - self.label_117.setText(_translate("MainWindow", "Settings", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_CONNECT), _translate("MainWindow", "Connectivity", None)) - self.structEnable.setText(_translate("MainWindow", "Enable", None)) - self.strcutShow.setToolTip(_translate("MainWindow", "

Display / Hide ROI

", None)) - self.strcutShow.setText(_translate("MainWindow", "Show", None)) - self._roiSettingsW.setTitle(_translate("MainWindow", "Settings", None)) +"width")) + self.label_109.setText(_translate("MainWindow", "Color")) + self.label_5.setText(_translate("MainWindow", "Radius")) + self.toolBox_6.setTitle(_translate("MainWindow", "Bundling")) + self._conBlEnable.setText(_translate("MainWindow", "Enable")) + self.label_37.setText(_translate("MainWindow", "Radius")) + self.label_38.setText(_translate("MainWindow", "dxyz")) + self.label_117.setText(_translate("MainWindow", "Settings")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_CONNECT), _translate("MainWindow", "Connectivity")) + self.structEnable.setText(_translate("MainWindow", "Enable")) + self.strcutShow.setToolTip(_translate("MainWindow", "

Display / Hide ROI

")) + self.strcutShow.setText(_translate("MainWindow", "Show")) + self._roiSettingsW.setTitle(_translate("MainWindow", "Settings")) self.label_113.setText(_translate("MainWindow", "Sub\n" -"division", None)) +"division")) self.label_112.setText(_translate("MainWindow", "Light\n" -"reflection", None)) - self.Sub_aal.setToolTip(_translate("MainWindow", "

Use AAL labeling

", None)) - self.Sub_aal.setText(_translate("MainWindow", "AAL", None)) - self.Sub_brod.setToolTip(_translate("MainWindow", "

Use Brodmann area labeling

", None)) - self.Sub_brod.setText(_translate("MainWindow", "Brodmann", None)) - self.label_2.setText(_translate("MainWindow", "Smooth", None)) - self.struct_External.setToolTip(_translate("MainWindow", "

Make ROI opaque

", None)) - self.struct_External.setText(_translate("MainWindow", "External", None)) - self.struct_Internal.setToolTip(_translate("MainWindow", "

Make ROI transparent

", None)) - self.struct_Internal.setText(_translate("MainWindow", "Internal", None)) - self.groupBox_16.setTitle(_translate("MainWindow", "Area selection", None)) - self.struct_addLst.setText(_translate("MainWindow", "Add", None)) - self.struct_rstLst.setText(_translate("MainWindow", "Reset", None)) - self.struct_rmvLst.setText(_translate("MainWindow", "Remove", None)) - self.groupBox_19.setTitle(_translate("MainWindow", "Color properties", None)) - self.label_16.setText(_translate("MainWindow", "Color/Colormap", None)) - self.struct_apply.setText(_translate("MainWindow", "Apply", None)) - self.structClear.setText(_translate("MainWindow", "Clear", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_AREA), _translate("MainWindow", "ROI", None)) - self._qcmapVisible.setToolTip(_translate("MainWindow", "

Use this parameter to see colormap changes in live

", None)) - self._qcmapVisible.setText(_translate("MainWindow", "Display", None)) - self.groupBox_12.setTitle(_translate("MainWindow", "Apply on", None)) - self.cmapSources.setText(_translate("MainWindow", "Sources", None)) - self.cmapConnect.setText(_translate("MainWindow", "Connectivity", None)) - self.groupBox_13.setTitle(_translate("MainWindow", "Colormap", None)) - self.label_10.setText(_translate("MainWindow", "Colormap", None)) - self.q_cmap_invert.setText(_translate("MainWindow", "Invert", None)) - self.q_auto_scale.setText(_translate("MainWindow", "Auto-scale", None)) - self.label_18.setText(_translate("MainWindow", "clim", None)) - self.q_vmin_chk.setToolTip(_translate("MainWindow", "Every values under vmin will be set to the \"under\" color", None)) - self.q_vmin_chk.setText(_translate("MainWindow", "vmin", None)) - self.q_vmax_chk.setText(_translate("MainWindow", "vmax", None)) - self.qUnder_txt.setText(_translate("MainWindow", "Under", None)) - self.qOver_txt.setText(_translate("MainWindow", "Over", None)) - self.label_11.setText(_translate("MainWindow", "Colorbar label: ", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_TRANS), _translate("MainWindow", "Colormap", None)) - self.uiErrorMsg.setText(_translate("MainWindow", "

ErrorMsg

", None)) - self.userRotation.setText(_translate("MainWindow", "TextLabel", None)) - self.menuFiles.setTitle(_translate("MainWindow", "Files", None)) - self.menuTransform.setTitle(_translate("MainWindow", "Transform", None)) - self.menuCortical_projection.setTitle(_translate("MainWindow", "Sources activity", None)) - self.menuDisplay.setTitle(_translate("MainWindow", "Display", None)) - self.menuPanel.setTitle(_translate("MainWindow", "Panel", None)) - self.menuHelp.setTitle(_translate("MainWindow", "Help", None)) - self.actionSave.setText(_translate("MainWindow", "Save", None)) - self.actionLoad.setText(_translate("MainWindow", "Load", None)) - self.actionCortical_repartition.setText(_translate("MainWindow", "Cortical repartition", None)) - self.actionCortical.setText(_translate("MainWindow", "Cortical", None)) - self.actionSagittal.setText(_translate("MainWindow", "Sagittal", None)) - self.actionAxial.setText(_translate("MainWindow", "Axial", None)) - self.actionCamera.setText(_translate("MainWindow", "Camera", None)) - self.actionLeft.setText(_translate("MainWindow", "Left", None)) - self.actionRight.setText(_translate("MainWindow", "Right", None)) - self.actionQuick_settings.setText(_translate("MainWindow", "Quick settings", None)) - self.actionQuick_settings.setShortcut(_translate("MainWindow", "Ctrl+D", None)) - self.actionClose.setText(_translate("MainWindow", "Close", None)) - self.actionClose.setShortcut(_translate("MainWindow", "Ctrl+Q", None)) - self.actionProjection.setText(_translate("MainWindow", "Projection", None)) - self.actionProjection.setToolTip(_translate("MainWindow", "

Find all vertices under a distance of t_radius with each source and project s_data to the surface

", None)) - self.actionProjection.setShortcut(_translate("MainWindow", "Ctrl+P", None)) - self.actionRepartition.setText(_translate("MainWindow", "Repartition", None)) - self.actionRepartition.setShortcut(_translate("MainWindow", "Ctrl+R", None)) - self.actionShortcuts.setText(_translate("MainWindow", "Shortcuts", None)) - self.actionShortcuts.setShortcut(_translate("MainWindow", "Ctrl+T", None)) - self.actionUi_settings.setText(_translate("MainWindow", "Ui settings", None)) - self.actionMNI.setText(_translate("MainWindow", "MNI", None)) - self.actionSources.setText(_translate("MainWindow", "Sources", None)) - self.actionConnectivity.setText(_translate("MainWindow", "Connectivity", None)) - self.actionColormap.setText(_translate("MainWindow", "Colormap", None)) - self.actionShortcut.setText(_translate("MainWindow", "Shortcuts", None)) - self.actionShortcut.setShortcut(_translate("MainWindow", "Ctrl+T", None)) - self.actionDocumentation.setText(_translate("MainWindow", "Documentation", None)) - self.actionDocumentation.setShortcut(_translate("MainWindow", "Ctrl+E", None)) - self.actionScreenshot.setText(_translate("MainWindow", "Screenshot", None)) - self.actionExit.setText(_translate("MainWindow", "Exit", None)) +"reflection")) + self.Sub_aal.setToolTip(_translate("MainWindow", "

Use AAL labeling

")) + self.Sub_aal.setText(_translate("MainWindow", "AAL")) + self.Sub_brod.setToolTip(_translate("MainWindow", "

Use Brodmann area labeling

")) + self.Sub_brod.setText(_translate("MainWindow", "Brodmann")) + self.label_2.setText(_translate("MainWindow", "Smooth")) + self.struct_External.setToolTip(_translate("MainWindow", "

Make ROI opaque

")) + self.struct_External.setText(_translate("MainWindow", "External")) + self.struct_Internal.setToolTip(_translate("MainWindow", "

Make ROI transparent

")) + self.struct_Internal.setText(_translate("MainWindow", "Internal")) + self.groupBox_16.setTitle(_translate("MainWindow", "Area selection")) + self.struct_addLst.setText(_translate("MainWindow", "Add")) + self.struct_rstLst.setText(_translate("MainWindow", "Reset")) + self.struct_rmvLst.setText(_translate("MainWindow", "Remove")) + self.groupBox_19.setTitle(_translate("MainWindow", "Color properties")) + self.label_16.setText(_translate("MainWindow", "Color/Colormap")) + self.struct_apply.setText(_translate("MainWindow", "Apply")) + self.structClear.setText(_translate("MainWindow", "Clear")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_AREA), _translate("MainWindow", "ROI")) + self._qcmapVisible.setToolTip(_translate("MainWindow", "

Use this parameter to see colormap changes in live

")) + self._qcmapVisible.setText(_translate("MainWindow", "Display")) + self.groupBox_12.setTitle(_translate("MainWindow", "Apply on")) + self.cmapSources.setText(_translate("MainWindow", "Sources")) + self.cmapConnect.setText(_translate("MainWindow", "Connectivity")) + self.groupBox_13.setTitle(_translate("MainWindow", "Colormap")) + self.label_10.setText(_translate("MainWindow", "Colormap")) + self.q_cmap_invert.setText(_translate("MainWindow", "Invert")) + self.q_auto_scale.setText(_translate("MainWindow", "Auto-scale")) + self.label_18.setText(_translate("MainWindow", "clim")) + self.q_vmin_chk.setToolTip(_translate("MainWindow", "Every values under vmin will be set to the \"under\" color")) + self.q_vmin_chk.setText(_translate("MainWindow", "vmin")) + self.q_vmax_chk.setText(_translate("MainWindow", "vmax")) + self.qUnder_txt.setText(_translate("MainWindow", "Under")) + self.qOver_txt.setText(_translate("MainWindow", "Over")) + self.label_11.setText(_translate("MainWindow", "Colorbar label: ")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_TRANS), _translate("MainWindow", "Colormap")) + self.uiErrorMsg.setText(_translate("MainWindow", "

ErrorMsg

")) + self.userRotation.setText(_translate("MainWindow", "TextLabel")) + self.menuFiles.setTitle(_translate("MainWindow", "Files")) + self.menuTransform.setTitle(_translate("MainWindow", "Transform")) + self.menuCortical_projection.setTitle(_translate("MainWindow", "Sources activity")) + self.menuDisplay.setTitle(_translate("MainWindow", "Display")) + self.menuPanel.setTitle(_translate("MainWindow", "Panel")) + self.menuHelp.setTitle(_translate("MainWindow", "Help")) + self.actionSave.setText(_translate("MainWindow", "Save")) + self.actionLoad.setText(_translate("MainWindow", "Load")) + self.actionCortical_repartition.setText(_translate("MainWindow", "Cortical repartition")) + self.actionCortical.setText(_translate("MainWindow", "Cortical")) + self.actionSagittal.setText(_translate("MainWindow", "Sagittal")) + self.actionAxial.setText(_translate("MainWindow", "Axial")) + self.actionCamera.setText(_translate("MainWindow", "Camera")) + self.actionLeft.setText(_translate("MainWindow", "Left")) + self.actionRight.setText(_translate("MainWindow", "Right")) + self.actionQuick_settings.setText(_translate("MainWindow", "Quick settings")) + self.actionQuick_settings.setShortcut(_translate("MainWindow", "Ctrl+D")) + self.actionClose.setText(_translate("MainWindow", "Close")) + self.actionClose.setShortcut(_translate("MainWindow", "Ctrl+Q")) + self.actionProjection.setText(_translate("MainWindow", "Projection")) + self.actionProjection.setToolTip(_translate("MainWindow", "

Find all vertices under a distance of t_radius with each source and project s_data to the surface

")) + self.actionProjection.setShortcut(_translate("MainWindow", "Ctrl+P")) + self.actionRepartition.setText(_translate("MainWindow", "Repartition")) + self.actionRepartition.setShortcut(_translate("MainWindow", "Ctrl+R")) + self.actionShortcuts.setText(_translate("MainWindow", "Shortcuts")) + self.actionShortcuts.setShortcut(_translate("MainWindow", "Ctrl+T")) + self.actionUi_settings.setText(_translate("MainWindow", "Ui settings")) + self.actionMNI.setText(_translate("MainWindow", "MNI")) + self.actionSources.setText(_translate("MainWindow", "Sources")) + self.actionConnectivity.setText(_translate("MainWindow", "Connectivity")) + self.actionColormap.setText(_translate("MainWindow", "Colormap")) + self.actionShortcut.setText(_translate("MainWindow", "Shortcuts")) + self.actionShortcut.setShortcut(_translate("MainWindow", "Ctrl+T")) + self.actionDocumentation.setText(_translate("MainWindow", "Documentation")) + self.actionDocumentation.setShortcut(_translate("MainWindow", "Ctrl+E")) + self.actionScreenshot.setText(_translate("MainWindow", "Screenshot")) + self.actionExit.setText(_translate("MainWindow", "Exit")) + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + MainWindow.show() + sys.exit(app.exec_()) diff --git a/visbrain/brain/interface/uiElements/uiSettings.py b/visbrain/brain/interface/uiElements/uiSettings.py index 6e9ba6ada..89e77cb6d 100644 --- a/visbrain/brain/interface/uiElements/uiSettings.py +++ b/visbrain/brain/interface/uiElements/uiSettings.py @@ -3,14 +3,15 @@ """Main class for settings managment (save / load / light / cameras...).""" import os import numpy as np -from PyQt4.QtGui import * -from PyQt4 import QtCore +from PyQt5.QtGui import * +from PyQt5 import QtCore, QtWidgets from vispy import io import vispy.scene.cameras as viscam from ....utils import uiSpinValue, piccrop +from ....io import write_fig_canvas __all__ = ['uiSettings'] @@ -27,7 +28,7 @@ def __init__(self): # ------------- Screenshot / Exit ------------- self.actionScreenshot.triggered.connect(self._screenshot) - self.actionExit.triggered.connect(qApp.quit) + self.actionExit.triggered.connect(QtWidgets.qApp.quit) # ------------- Display ------------- self.actionUi_settings.triggered.connect(self._fcn_panSettingsViz) @@ -230,51 +231,19 @@ def _screenshot(self): if not ext: raise ValueError("No extension detected in "+saveas) - # Manage size exportation. The dpi option present when creating a - # vispy canvas doesn't seems to work. The trick bellow increase the - # physical size of the canvas so that the exported figure has a - # high-definition : - # Get a copy of the actual canvas physical size : - backp_size = self.view.canvas.physical_size - - # Increase the physical size : - ratio = max((2*self._uirez)/backp_size[0], self._uirez/backp_size[1]) - new_size = (int(backp_size[0]*ratio), int(backp_size[1]*ratio)) - self.view.canvas._backend._physical_size = new_size - - # Render and save : - if self._crop is not None: - kwargs = {'region': self._crop} - else: - kwargs = {'size': new_size} - img = self.view.canvas.render(**kwargs) - if self._autocrop: - img = piccrop(img) - io.imsave(saveas, img) - - # Set to the canvas it's previous size : - self.view.canvas._backend._physical_size = backp_size + # Export the main canvas : + write_fig_canvas(saveas, self.view.canvas, resolution=self._uirez, + autocrop=self._autocrop, region=self._crop) # Export the colorbar : # self.cb['export'] = True if self.cb['export']: - # Get a copy of the actual canvas physical size : - backp_size = self.view.cbcanvas.physical_size - new_size = (int(backp_size[0]*ratio), int(backp_size[1]*ratio)) - self.view.cbcanvas._backend._physical_size = new_size - # Render colorbar panel : - if self._crop is not None: - kwargs = {'region': self._cbcrop} - else: - kwargs = {'size': new_size} - cbimg = self.view.cbcanvas.render(**kwargs) - if self._autocrop: - cbimg = piccrop(cbimg) # Colorbar file name : filename_colorbar.extension - filename = saveas.replace('.', '_colorbar.') - io.imsave(filename, cbimg) - # Set to the canvas it's previous size : - self.view.cbcanvas._backend._physical_size = backp_size + saveas = saveas.replace('.', '_colorbar.') + + # Export the colorbar canvas : + write_fig_canvas(saveas, self.view.cbcanvas, region=self._cbcrop, + autocrop=self._autocrop, resolution=self._uirez) def _toggle_settings(self): """Toggle method for display / hide the settings panel.""" diff --git a/visbrain/brain/interface/uiInit.py b/visbrain/brain/interface/uiInit.py index 6e99481f1..1f52a0f48 100644 --- a/visbrain/brain/interface/uiInit.py +++ b/visbrain/brain/interface/uiInit.py @@ -6,7 +6,7 @@ * User shortcuts """ -from PyQt4 import QtGui +from PyQt5 import QtWidgets from vispy import app from .gui import Ui_MainWindow @@ -16,7 +16,7 @@ __all__ = ['uiInit'] -class uiInit(QtGui.QMainWindow, Ui_MainWindow, app.Canvas, vbShortcuts): +class uiInit(QtWidgets.QMainWindow, Ui_MainWindow, app.Canvas, vbShortcuts): """Group and initialize the graphical elements and interactions. Kargs: diff --git a/visbrain/io/__init__.py b/visbrain/io/__init__.py new file mode 100644 index 000000000..a153453c6 --- /dev/null +++ b/visbrain/io/__init__.py @@ -0,0 +1,11 @@ +"""Load read and write functions.""" +from .read_data import * +from .read_sleep import * +from .write_table import * +from .write_image import * +from .write_data import * +from .mneio import * +from .dialog import * +from .rw_utils import * +from .rw_hypno import * +from .rw_config import * diff --git a/visbrain/io/dialog.py b/visbrain/io/dialog.py new file mode 100644 index 000000000..1ed691783 --- /dev/null +++ b/visbrain/io/dialog.py @@ -0,0 +1,72 @@ +"""Dialog window for saving and loading files. + + - dialogSave : Open a window to save a file + - dialogLoad : Open a window to load a file +""" +from PyQt5.QtWidgets import QFileDialog +import os +from .rw_utils import safety_save + +__all__ = ['dialogSave', 'dialogLoad'] + + +def dialogSave(self, name='Save file', default='file', + allext=['All files (*.*)']): + """Open a window to save a file. + + Args: + self: class + Class containing PyQt5 elemnets. + + Kargs: + name: string, optional, (def: 'Save file') + Name of the saving window. + + default: string, optional, (def: 'file') + Default name of the saved file. + + allext: list, optional, (def: ['All files (*.*)']) + String containing all the extensions. Must be a list where each + element is a string of type 'Ext (*.ext)' + + Returns: + filename: string + Filename for saving. + """ + # Build all extensions : + if isinstance(allext, (list, tuple)): + allext = ';;'.join(allext) + # Open the window : + file, ext = QFileDialog.getSaveFileName(self, name, default, allext) + # By default, use the extension in the ruler : + file = os.path.splitext(str(file))[0] + ext = os.path.splitext(str(ext))[1][0:-1].lower() + return safety_save(file + ext) + + +def dialogLoad(self, name='Open file', default='file', + allext=['All files (*.*)']): + """Open a window to load a file. + + Args: + self: class + Class containing PyQt5 elemnets. + + Kargs: + name: string, optional, (def: 'Save file') + Name of the opening window. + + default: string, optional, (def: 'file') + Default name of the opened file. + + allext: list, optional, (def: ['All files (*.*)']) + String containing all the extensions. Must be a list where each + element is a string of type 'Ext (*.ext)' + + Returns: + filename: string + Filename for opening. + """ + # Open the window : + file, _ = QFileDialog.getOpenFileName(self, name, default, allext) + return str(file) diff --git a/visbrain/io/mneio.py b/visbrain/io/mneio.py new file mode 100644 index 000000000..e2dc72ef8 --- /dev/null +++ b/visbrain/io/mneio.py @@ -0,0 +1,42 @@ +"""Utility functions if MNE is installed.""" + +__all__ = ['mne_is_installed', 'mne_read_sleep'] + + +def mne_is_installed(): + """Test if MNE is installed.""" + try: + import mne + return True + except: + return False + + +def mne_read_sleep(file, ext, *args, **kwargs): + """Read sleep datasets using mne.io. + + Args: + file: string + Filename. + + ext: string + File extension. + + arg: tuple + Further arguments. + + Kargs: + kargs: dict, optional, (def: {}) + Further optional arguments. + """ + from mne.io import (read_raw_egi, read_raw_cnt) + raise ValueError("ASSURER COMPATIBILITE MNE") + + # Get full path : + path = file + ext + + if ext == '.egi': # EGI + return read_raw_egi(path, *args, **kwargs) + + elif ext == '.cnt': # EGI + return read_raw_cnt(path, *args, **kwargs) diff --git a/visbrain/io/read_data.py b/visbrain/io/read_data.py new file mode 100644 index 000000000..ca1c5d66a --- /dev/null +++ b/visbrain/io/read_data.py @@ -0,0 +1,93 @@ +"""Load data files. + +This file contain functions to load : +- Matlab (*.mat) +- Pickle (*.pickle) +- NumPy (*.npy and *.npz) +- Text (*.txt) +- CSV (*.csv) +- JSON (*.json) +""" +import numpy as np +from scipy.io import loadmat +import os + +from .rw_utils import get_file_ext + +__all__ = ['switch_data', 'read_mat', 'read_pickle', 'read_npy', 'read_npz', + 'read_txt', 'read_csv', 'read_json'] + + +def switch_data(path, *args, **kwargs): + """Switch between data files. + + Args: + path: string + Filename. + + arg: tuple + Further arguments. + + Kargs: + kargs: dict, optional, (def: {}) + Further optional arguments. + """ + # Find file extension : + file, ext = get_file_ext(path) + + if ext == '.mat': # Matlab + return read_mat(path, *args, **kwargs) + + elif ext == '.pickle': # Pickle + return read_pickle(path, *args, **kwargs) + + elif ext == '.npy': # NumPy (npy) + return read_npy(path, *args, **kwargs) + + elif ext == '.npz': # NumPy (npz) + return read_npz(path, *args, **kwargs) + + elif ext == '.txt': # Text file + return read_txt(path, *args, **kwargs) + + elif ext == '.csv': # CSV file + return read_csv(path, *args, **kwargs) + + elif ext == '.json': # JSON file + return read_json(path, *args, **kwargs) + + +def read_mat(path, vars=None): + """Read data from a Matlab (mat) file.""" + return loadmat(path, variable_names=vars) + + +def read_pickle(path, vars=None): + """Read data from a Pickle (pickle) file.""" + # np.loads? ou depuis import pickle + pass + + +def read_npy(path): + """Read data from a NumPy (npy) file.""" + return np.load(path) + + +def read_npz(path, vars=None): + """Read data from a Numpy (npz) file.""" + pass + + +def read_txt(path): + """Read data from a text (txt) file.""" + pass + + +def read_csv(path): + """Read data from a CSV (csv) file.""" + pass + + +def read_json(path): + """Read data from a JSON (json) file.""" + pass diff --git a/visbrain/io/read_sleep.py b/visbrain/io/read_sleep.py new file mode 100644 index 000000000..ad38ad74b --- /dev/null +++ b/visbrain/io/read_sleep.py @@ -0,0 +1,84 @@ +"""Load sleep files. + +This file contain functions to load : +- European Data Format (*.edf) +- Micromed (*.trc) +- BrainVision (*.eeg) +- ELAN (*.eeg) +- Hypnogram (*.hyp) +- JSON (*.json) +""" +import os + +from .rw_utils import get_file_ext +from .mneio import mne_is_installed, mne_read_sleep + +__all__ = ['switch_sleep', 'read_edf', 'read_trc', 'read_eeg', 'read_elan', + 'read_hyp'] + + +def switch_sleep(path, *args, **kwargs): + """Switch between sleep data files. + + Args: + path: string + Full path to the filename. + + arg: tuple + Further arguments. + + Kargs: + kargs: dict, optional, (def: {}) + Further optional arguments. + """ + # Find file extension : + file, ext = get_file_ext(path) + + if ext == '.eeg': # BrainVision // ELAN + if os.path.isfile(file + '.ent'): # ELAN + return read_elan(path, *args, **kwargs) + + elif os.path.isfile(file + '.vhdr'): # BrainVision + return read_eeg(path, *args, **kwargs) + + else: # None : + raise ValueError("No header file found in this directory. You " + "should have a *.ent (ELAN) or *.vhdr " + "(BrainVision)") + + elif ext == '.edf': # European Data Format + return read_edf(path, *args, **kwargs) + + elif ext == '.trc': # Micromed + return read_trc(path, *args, **kwargs) + + elif mne_is_installed() and (ext in ['.egi', '.cnt']): # Present in MNE + return mne_read_sleep(file, ext, *args, **kwargs) + + else: # None + raise ValueError("*" + ext + " files are currently not supported.") + + +def read_edf(): + """Read data from a European Data Format (edf) file.""" + pass + + +def read_trc(): + """Read data from a Micromed (trc) file.""" + pass + + +def read_eeg(): + """Read data from a BrainVision (eeg) file.""" + pass + + +def read_elan(): + """Read data from a ELAN (eeg) file.""" + pass + + +def read_hyp(): + """Read data from a hypnogram (hyp) file.""" + pass diff --git a/visbrain/io/rw_config.py b/visbrain/io/rw_config.py new file mode 100644 index 000000000..6a81d69bb --- /dev/null +++ b/visbrain/io/rw_config.py @@ -0,0 +1,26 @@ +""" +""" + +__all__ = ['write_config_json'] + + +def write_config_json(filename, vars={}): + """Save configuration file as JSON. + + Args: + filename: string + Filename for saving. + + Kargs: + vars: dict, optional, (def: {}) + Variables to save. + """ + import json + if filename: + with open(filename, 'w') as f: + json.dump(vars, f) + + +def load_config_json(filename): + """Load configuration file as JSON.""" + pass diff --git a/visbrain/io/rw_hypno.py b/visbrain/io/rw_hypno.py new file mode 100644 index 000000000..2df68f098 --- /dev/null +++ b/visbrain/io/rw_hypno.py @@ -0,0 +1,297 @@ +"""write/Read hypnogram data. + +- write_hypno_txt : as text file +- write_hypno_hyp : as hyp file +- read_hypno : read either *.hyp or *.txt hypnogram data +- load_hypno_hyp : load *.hyp hypnogram data +- load_hypno_txt : load *.txt hypnogram data +""" +import numpy as np +import os +from warnings import warn + +__all__ = ['write_hypno_txt', 'write_hypno_hyp', 'read_hypno', + 'load_hypno_hyp', 'load_hypno_txt'] + + +def write_hypno_txt(filename, hypno, sf, sfori, N, window=1.): + """Save hypnogram in txt file format (*.txt). + + Header is in file filename_description.txt + + Args: + filename: str + Filename (with full path) of the file to save + + hypno: np.ndarray + Hypnogram array, same length as data + + sf: float + Sampling frequency of the data (after downsampling) + + sfori: int + Original sampling rate of the raw data + + N: int + Original number of points in the raw data + + Kargs: + window: float, optional, (def 1) + Time window (second) of each point in the hypno + Default is one value per second + (e.g. window = 30 = 1 value per 30 second) + """ + base = os.path.basename(filename) + dirname = os.path.dirname(filename) + descript = os.path.join(dirname, os.path.splitext( + base)[0] + '_description.txt') + + # Save hypno + step = int(hypno.shape / np.round(N / sfori)) + np.savetxt(filename, hypno[::step].astype(int), fmt='%s') + + # Save header file + hdr = np.array([['time ' + str(window)], ['W 0'], ['N1 1'], ['N2 2'], + ['N3 3'], ['REM 4'], ['Art -1']]).flatten() + np.savetxt(descript, hdr, fmt='%s') + + +def write_hypno_hyp(filename, hypno, sf, sfori, N): + """Save hypnogram in Elan file format (*.hyp). + + Args: + filename: str + Filename (with full path) of the file to save + + hypno: np.ndarray + Hypnogram array, same length as data + + sf: int + Sampling frequency of the data (after downsampling) + + sfori: int + Original sampling rate of the raw data + + N: int + Original number of points in the raw data + """ + # Check data format + sf = int(sf) + hypno = hypno.astype(int) + hypno[hypno == 4] = 5 + step = int(hypno.shape / np.round(N / sfori)) + + hdr = np.array([['time_base 1.000000'], + ['sampling_period ' + str(np.round(1/sfori, 8))], + ['epoch_nb ' + str(int(N / sfori))], + ['epoch_list']]).flatten() + + # Save + export = np.append(hdr, hypno[::step].astype(str)) + np.savetxt(filename, export, fmt='%s') + + +def read_hypno(path, npts): + """Load hypnogram file. + + Sleep stages in the hypnogram should be scored as follow + see Iber et al. 2007 + + Wake: 0 + N1: 1 + N2: 2 + N3: 3 + REM: 4 + Art: -1 (optional) + + Args: + path: string + Filename (with full path) to hypnogram file. + + npts: int + Data length. + + Return: + hypno: np.ndarray + The hypnogram vector with same length as downsampled data. + """ + # Test if file exist : + assert os.path.isfile(path) + + # Extract file extension : + file, ext = os.path.splitext(path) + + # Try loading file : + try: + if ext in ['.hyp', '.txt', '.csv']: + # ----------- ELAN ----------- + if ext == '.hyp': + hypno = load_hypno_hyp(path, npts) + + # ----------- TXT / CSV ----------- + elif ext in ['.txt', '.csv']: + hypno = load_hypno_txt(path, npts) + + # Complete hypnogram if needed : + n = len(hypno) + if n < npts: + hypno = np.append(hypno, hypno[-1]*np.ones((npts-n,))) + elif n > npts: + raise ValueError("The length of the hypnogram \ + vector must be" + str(npts) + + " (Currently : " + str(n) + ".") + + return hypno + + except: + warn("\nAn error ocurred while trying to load the hypnogram. An empty" + " one will be used instead.") + return None + + +def load_hypno_hyp(path, npts): + """Read Elan hypnogram (hyp). + + Args: + path: str + Filename(with full path) to Elan .hyp file + + npts: int + Data length. + + Return: + hypno: np.ndarray + The hypnogram vector with same length as downsampled data. + + """ + hyp = np.genfromtxt(path, delimiter='\n', usecols=[0], + dtype=None, skip_header=0) + + hyp = np.char.decode(hyp) + + # Sampling rate of original .eeg file + # sf = 1 / float(hyp[1].split()[1]) + + # Extract hypnogram values + hypno = np.array(hyp[4:], dtype=np.int) + + # Replace values according to Iber et al 2007 + hypno[hypno == -2] = -1 + hypno[hypno == 4] = 3 + hypno[hypno == 5] = 4 + + # Get the repetition number : + rep = int(np.floor(npts/len(hypno))) + + # Resample to get same number of points as in eeg file + hypno = np.repeat(hypno, rep) + + return hypno + + +def load_hypno_txt(path, npts): + """Read text files (.txt / .csv) hypnogram. + + Args: + path: str + Filename(with full path) to hypnogram(.txt) + + npts: int + Data length. + + Return: + hypno: np.ndarray + The hypnogram vector with same length as downsampled data. + + """ + assert os.path.isfile(path) + + file, ext = os.path.splitext(path) + + header = file + '_description.txt' + assert os.path.isfile(header) + + # Load header file + labels = np.genfromtxt(header, dtype=str, delimiter=" ", usecols=0) + values = np.genfromtxt(header, dtype=int, delimiter=" ", usecols=1) + desc = {label: row for label, row in zip(labels, values)} + + # Load hypnogram file + hyp = np.genfromtxt(path, delimiter='\n', usecols=[0], + dtype=None, skip_header=0) + + if not np.issubdtype(hyp.dtype, np.integer): + hyp = np.char.decode(hyp) + hypno = np.array([s for s in hyp if s.lstrip('-').isdigit()], + dtype=int) + else: + hypno = hyp.astype(int) + + hypno = swap_hyp_values(hypno, desc) + + # Get the repetition number : + rep = int(np.floor(npts/len(hypno))) + + # Resample to get same number of points as in eeg file + hypno = np.repeat(hypno, rep) + + return hypno + + +def swap_hyp_values(hypno, desc): + """Swap values in hypnogram vector. + + Sleep stages in the hypnogram should be scored as follow + see Iber et al. 2007 + + Args: + hypno: np.ndarray + The hypnogram vector + + description: str + Path to a .txt file containing labels and values of each sleep + stage separated by a space + + Return: + hypno_s: np.ndarray + Hypnogram with swapped values + + e.g from the DREAM bank EDF database + Stage Orig. val New val + W 5 0 + N1 3 1 + N2 2 2 + N3 1 3 + REM 0 4 + """ + # Swap values + hypno_s = -1 * np.ones(shape=(hypno.shape), dtype=int) + + if 'Art' in desc: + hypno_s[hypno == desc['Art']] = -1 + + if 'Nde' in desc: + hypno_s[hypno == desc['Nde']] = -1 + + if 'Mt' in desc: + hypno_s[hypno == desc['Mt']] = -1 + + if 'W' in desc: + hypno_s[hypno == desc['W']] = 0 + + if 'N1' in desc: + hypno_s[hypno == desc['N1']] = 1 + + if 'N2' in desc: + hypno_s[hypno == desc['N2']] = 2 + + if 'N3' in desc: + hypno_s[hypno == desc['N3']] = 3 + + if 'N4' in desc: + hypno_s[hypno == desc['N4']] = 3 + + if 'REM' in desc: + hypno_s[hypno == desc['REM']] = 4 + + return hypno_s \ No newline at end of file diff --git a/visbrain/io/rw_utils.py b/visbrain/io/rw_utils.py new file mode 100644 index 000000000..c6a5343c8 --- /dev/null +++ b/visbrain/io/rw_utils.py @@ -0,0 +1,57 @@ +"""Utility functions for saving/loading files. + +- get_file_ext : Get the filename and extension +- safety_save : If a file exist, avoid arasing it when saving. +""" +import os + +__all__ = ['get_file_ext', 'safety_save'] + + +def get_file_ext(path): + """Get the filename and extension. + + Args: + path: strin + Path to the file. + + Returns: + file: string + Name of the file + + ext: string + Extension of the file. + """ + # Test if file exist : + assert os.path.isfile(path) + # Find file extension : + file, ext = os.path.splitext(path) + # Be sure to be in lowercase : + ext = ext.lower() + return file, ext + + +def safety_save(path, limit=100): + """If a file exist, avoid arasing it when saving. + + Args: + path: string + Path to the file. + + Kargs: + limit: int, optional, (def: 100) + Limit for the filename occurence. + + Returns: + name: string + Unique filename. + """ + k = 1 + while os.path.isfile(path) and (k < limit): + fname, fext = os.path.splitext(path) + if fname.find('(')+1: + path = fname[0:fname.find('(')+1]+str(k)+')'+fext + else: + path = fname+'('+str(k)+')'+fext + k += 1 + return path diff --git a/visbrain/io/write_data.py b/visbrain/io/write_data.py new file mode 100644 index 000000000..59c40b382 --- /dev/null +++ b/visbrain/io/write_data.py @@ -0,0 +1,67 @@ +"""Write data. + +- write_npy : Write data as a NumPy (npy) file +- write_npz : Write data as a NumPy (npz) file +- write_mat : Write data as a Matlab (mat) file +- write_txt : Write data as a text (txt) file +- write_csv : Write data as a CSV (csv) file +- write_hyp : Write data as a hyp (hyp) file +""" + +__all__ = ['write_npy', 'write_npz', 'write_mat', 'write_txt', 'write_csv', + 'write_hyp'] + + +def write_npy(): + """Write data as a NumPy (npy) file.""" + pass + + +def write_npz(): + """Write data as a NumPy (npz) file.""" + pass + + +def write_mat(): + """Write data as a Matlab (mat) file.""" + pass + + +def write_txt(file, data): + """Write data as a text (txt) file. + + Args: + file: string + File name for saving file. + + data: list + List of data to save to the txt file. + """ + # Open file : + ofile = open(file, 'w') + for k in data: + ofile.write("%s\n" % ', '.join(k)) + return + + +def write_csv(file, data): + """Write data as a CSV (csv) file. + + Args: + file: string + File name for saving file. + + data: list + List of data to save to the csv file. + """ + import csv + with open(file, 'w') as csvfile: + writer = csv.writer(csvfile, dialect='excel', delimiter=',') + for k in data: + writer.writerow(k) + return + + +def write_hyp(): + """Write data as a hyp (hyp) file.""" + pass diff --git a/visbrain/io/write_image.py b/visbrain/io/write_image.py new file mode 100644 index 000000000..4ab25ce6c --- /dev/null +++ b/visbrain/io/write_image.py @@ -0,0 +1,168 @@ +"""Export graphical components as figures. + +- write_fig_hyp : Export the hypnogram as a figure +- write_fig_canvas : Export a canvas as a figure +- write_fig_pyqt : Export a GUI window as a figure +""" +import numpy as np + + +__all__ = ['write_fig_hyp', 'write_fig_canvas', 'write_fig_pyqt'] + + +def write_fig_hyp(file, hypno, sf, tstartsec, grid=False, ascolor=False, + colors={-1: '#8bbf56', 0: '#56bf8b', 1: '#aabcce', + 2: '#405c79', 3: '#0b1c2c', 4: '#bf5656'}): + """Export hypnogram to a 600 dpi png figure. + + Args: + file: str + Filename (with full path) to sleep dataset. + + hypno: np.ndarray + Hypnogram vector + + sf: float, optional, (def: 100.) + The sampling frequency of displayed elements (could be the + down-sampling frequency) + + tstartsec: int + Record starting time given in seconds. + + Kargs: + grid: boolean, optional (def False) + Plot X and Y grid. + """ + import matplotlib.pyplot as plt + import datetime + + # Downsample to get one value per second + sf = int(sf) + hypno = hypno[::sf] + + # Put REM between Wake and N1 sleep + hypno[hypno >= 1] += 1 + hypno[hypno == 5] = 1 + idxREM = np.where(hypno == 1)[0] + valREM = np.zeros(hypno.size) + valREM[:] = np.nan + valREM[idxREM] = 1 + + # Find if artefacts are present in hypno + art = True if -1 in hypno else False + + # Start plotting + fig, ax = plt.subplots(figsize=(10, 4), edgecolor='k') + lhyp = len(hypno) / 60 + lw = 1.5 + if lhyp < 60: + xticks = np.arange(0, len(hypno), 10 * 60) + lw = 2 + elif lhyp < 180 and lhyp > 60: + xticks = np.arange(0, len(hypno), 30 * 60) + else: + xticks = np.arange(0, len(hypno), 60 * 60) + + xticks = np.append(xticks, len(hypno)) + xlabels = (xticks + tstartsec).astype(int) + xlabels_str = [str(datetime.timedelta(seconds=int(j)))[:-3] + for i, j in enumerate(xlabels)] + xlabels_str = [s.replace('1 day, ', '') for s in xlabels_str] + plt.xlim(0, len(hypno)) + plt.xticks(xticks, xlabels_str) + if not ascolor: + plt.plot(hypno, 'k', ls='steps', linewidth=lw) + else: + for k, i in colors.items(): + # Quick and dirty switch : + if k == 1: + q = 2 + elif k == 4: + q = 1 + elif k in [2, 3]: + q = k + 1 + else: + q = k + mask = np.ones((len(hypno),), dtype=bool) + idxm = np.where(hypno == q)[0] + 1 + idxm[idxm >= len(hypno)] = len(hypno) - 1 + mask[idxm] = False + plt.plot(np.ma.masked_array(hypno, mask=mask), i, linewidth=lw) + + # Plot REM epochs + remcol = 'k' if not ascolor else colors[4] + for i in np.arange(0.6, 1, 0.01): + plt.plot(np.arange(len(hypno)), i * valREM, remcol, linewidth=lw) + + # Y-Ticks and Labels + if art: + ylabels = ['Art', 'Wake', 'REM', 'N1', 'N2', 'N3'] + plt.yticks([-1, 0, 1, 2, 3, 4], ylabels) + plt.ylim(-1.5, 4.5) + else: + ylabels = ['', 'Wake', 'REM', 'N1', 'N2', 'N3'] + plt.yticks([-0.5, 0, 1, 2, 3, 4], ylabels) + plt.ylim(-.5, 4.5) + + # X-Ticks and Labels + plt.xlabel("Time") + plt.ylabel("Sleep Stage") + + # Grid + if grid: + plt.grid(True, 'major', ls=':', lw=.2, c='k', alpha=.3) + + plt.tick_params(axis='both', which='both', bottom='on', top='off', + labelbottom='on', left='on', right='off', labelleft='on', + labelcolor='k', direction='out') + + # Invert Y axis and despine + ax.invert_yaxis() + ax.spines['right'].set_visible(False) + ax.spines['top'].set_visible(False) + ax.spines['left'].set_visible(True) + ax.spines['bottom'].set_visible(True) + + ax.spines['left'].set_position(('outward', 10)) + ax.spines['bottom'].set_position(('outward', 10)) + ax.spines['bottom'].set_smart_bounds(True) + + # Save as 600 dpi .png + plt.savefig(file, format='png', dpi=600, bbox_inches='tight') + + +def write_fig_canvas(filename, canvas, resolution=3000, autocrop=False, + region=None): + """Export a canvas as a figure.""" + from ..utils import piccrop + import vispy + + # Manage size exportation. The dpi option present when creating a + # vispy canvas doesn't seems to work. The trick bellow increase the + # physical size of the canvas so that the exported figure has a + # high-definition : + # Get a copy of the actual canvas physical size : + backp_size = canvas.physical_size + + # Increase the physical size : + ratio = max((2*resolution)/backp_size[0], resolution/backp_size[1]) + new_size = (int(backp_size[0]*ratio), int(backp_size[1]*ratio)) + canvas._backend._physical_size = new_size + + # Render and save : + if region is not None: + kwargs = {'region': region} + else: + kwargs = {'size': new_size} + img = canvas.render(**kwargs) + if autocrop: + img = piccrop(img) + vispy.io.imsave(filename, img) + + # Set to the canvas it's previous size : + canvas._backend._physical_size = backp_size + + +def write_fig_pyqt(): + """Export a GUI window as a figure.""" + pass diff --git a/visbrain/io/write_table.py b/visbrain/io/write_table.py new file mode 100644 index 000000000..7ad0a709e --- /dev/null +++ b/visbrain/io/write_table.py @@ -0,0 +1,17 @@ +"""write GUI tables. + +- write_table_txt : as text file +- write_table_csv : as csv file +""" + +__all__ = ['write_table_txt', 'write_table_csv'] + + +def write_table_txt(): + """Write a table in a text (txt) file.""" + pass + + +def write_table_csv(): + """Write a table in a CSV (csv) file.""" + pass diff --git a/visbrain/ndviz/interface/gui/ndviz_gui.py b/visbrain/ndviz/interface/gui/ndviz_gui.py index a69e4a6ee..006757bae 100644 --- a/visbrain/ndviz/interface/gui/ndviz_gui.py +++ b/visbrain/ndviz/interface/gui/ndviz_gui.py @@ -2,1220 +2,1213 @@ # Form implementation generated from reading ui file '/home/etienne/Toolbox/visbrain/visbrain/ndviz/interface/gui/ndviz_gui.ui' # -# Created by: PyQt4 UI code generator 4.11.4 +# Created by: PyQt5 UI code generator 5.8.2 # # WARNING! All changes made in this file will be lost! -from PyQt4 import QtCore, QtGui - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - def _fromUtf8(s): - return s - -try: - _encoding = QtGui.QApplication.UnicodeUTF8 - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) -except AttributeError: - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig) +from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): - MainWindow.setObjectName(_fromUtf8("MainWindow")) + MainWindow.setObjectName("MainWindow") MainWindow.setEnabled(True) MainWindow.resize(1328, 919) - MainWindow.setTabShape(QtGui.QTabWidget.Rounded) - self.centralwidget = QtGui.QWidget(MainWindow) - self.centralwidget.setObjectName(_fromUtf8("centralwidget")) - self.horizontalLayout_2 = QtGui.QHBoxLayout(self.centralwidget) - self.horizontalLayout_2.setMargin(0) + MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget) + self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setSpacing(0) - self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) - self.q_widget = QtGui.QWidget(self.centralwidget) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.q_widget = QtWidgets.QWidget(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.q_widget.sizePolicy().hasHeightForWidth()) self.q_widget.setSizePolicy(sizePolicy) self.q_widget.setMinimumSize(QtCore.QSize(0, 0)) self.q_widget.setMaximumSize(QtCore.QSize(400, 16777215)) - self.q_widget.setObjectName(_fromUtf8("q_widget")) - self.verticalLayout_4 = QtGui.QVBoxLayout(self.q_widget) - self.verticalLayout_4.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint) - self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4")) - self.QuickSettings = QtGui.QTabWidget(self.q_widget) + self.q_widget.setObjectName("q_widget") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.q_widget) + self.verticalLayout_4.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.QuickSettings = QtWidgets.QTabWidget(self.q_widget) self.QuickSettings.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.QuickSettings.setAutoFillBackground(False) self.QuickSettings.setMovable(True) - self.QuickSettings.setObjectName(_fromUtf8("QuickSettings")) - self.q_UI = QtGui.QWidget() - self.q_UI.setObjectName(_fromUtf8("q_UI")) - self.verticalLayout = QtGui.QVBoxLayout(self.q_UI) - self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) - self.scrollArea_2 = QtGui.QScrollArea(self.q_UI) + self.QuickSettings.setObjectName("QuickSettings") + self.q_UI = QtWidgets.QWidget() + self.q_UI.setObjectName("q_UI") + self.verticalLayout = QtWidgets.QVBoxLayout(self.q_UI) + self.verticalLayout.setObjectName("verticalLayout") + self.scrollArea_2 = QtWidgets.QScrollArea(self.q_UI) self.scrollArea_2.setWidgetResizable(True) - self.scrollArea_2.setObjectName(_fromUtf8("scrollArea_2")) - self.scrollAreaWidgetContents_3 = QtGui.QWidget() + self.scrollArea_2.setObjectName("scrollArea_2") + self.scrollAreaWidgetContents_3 = QtWidgets.QWidget() self.scrollAreaWidgetContents_3.setGeometry(QtCore.QRect(0, 0, 328, 147)) - self.scrollAreaWidgetContents_3.setObjectName(_fromUtf8("scrollAreaWidgetContents_3")) - self.verticalLayout_27 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_3) - self.verticalLayout_27.setObjectName(_fromUtf8("verticalLayout_27")) - self.groupBox_5 = QtGui.QGroupBox(self.scrollAreaWidgetContents_3) - self.groupBox_5.setObjectName(_fromUtf8("groupBox_5")) - self.horizontalLayout_8 = QtGui.QHBoxLayout(self.groupBox_5) - self.horizontalLayout_8.setObjectName(_fromUtf8("horizontalLayout_8")) - self.label_5 = QtGui.QLabel(self.groupBox_5) - self.label_5.setObjectName(_fromUtf8("label_5")) + self.scrollAreaWidgetContents_3.setObjectName("scrollAreaWidgetContents_3") + self.verticalLayout_27 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_3) + self.verticalLayout_27.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_27.setObjectName("verticalLayout_27") + self.groupBox_5 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_3) + self.groupBox_5.setObjectName("groupBox_5") + self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.groupBox_5) + self.horizontalLayout_8.setObjectName("horizontalLayout_8") + self.label_5 = QtWidgets.QLabel(self.groupBox_5) + self.label_5.setObjectName("label_5") self.horizontalLayout_8.addWidget(self.label_5) - self._uiBgdRed = QtGui.QDoubleSpinBox(self.groupBox_5) + self._uiBgdRed = QtWidgets.QDoubleSpinBox(self.groupBox_5) self._uiBgdRed.setMaximum(1.0) self._uiBgdRed.setSingleStep(0.1) - self._uiBgdRed.setObjectName(_fromUtf8("_uiBgdRed")) + self._uiBgdRed.setObjectName("_uiBgdRed") self.horizontalLayout_8.addWidget(self._uiBgdRed) - spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_8.addItem(spacerItem) - self.label_6 = QtGui.QLabel(self.groupBox_5) - self.label_6.setObjectName(_fromUtf8("label_6")) + self.label_6 = QtWidgets.QLabel(self.groupBox_5) + self.label_6.setObjectName("label_6") self.horizontalLayout_8.addWidget(self.label_6) - self._uiBgdGreen = QtGui.QDoubleSpinBox(self.groupBox_5) + self._uiBgdGreen = QtWidgets.QDoubleSpinBox(self.groupBox_5) self._uiBgdGreen.setMaximum(1.0) self._uiBgdGreen.setSingleStep(0.1) - self._uiBgdGreen.setObjectName(_fromUtf8("_uiBgdGreen")) + self._uiBgdGreen.setObjectName("_uiBgdGreen") self.horizontalLayout_8.addWidget(self._uiBgdGreen) - spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_8.addItem(spacerItem1) - self.label_7 = QtGui.QLabel(self.groupBox_5) - self.label_7.setObjectName(_fromUtf8("label_7")) + self.label_7 = QtWidgets.QLabel(self.groupBox_5) + self.label_7.setObjectName("label_7") self.horizontalLayout_8.addWidget(self.label_7) - self._uiBgdBlue = QtGui.QDoubleSpinBox(self.groupBox_5) + self._uiBgdBlue = QtWidgets.QDoubleSpinBox(self.groupBox_5) self._uiBgdBlue.setMaximum(1.0) self._uiBgdBlue.setSingleStep(0.1) - self._uiBgdBlue.setObjectName(_fromUtf8("_uiBgdBlue")) + self._uiBgdBlue.setObjectName("_uiBgdBlue") self.horizontalLayout_8.addWidget(self._uiBgdBlue) self.verticalLayout_27.addWidget(self.groupBox_5) - self.groupBox_11 = QtGui.QGroupBox(self.scrollAreaWidgetContents_3) - self.groupBox_11.setObjectName(_fromUtf8("groupBox_11")) - self.gridLayout_2 = QtGui.QGridLayout(self.groupBox_11) - self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) - self.gridLayout = QtGui.QGridLayout() + self.groupBox_11 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_3) + self.groupBox_11.setObjectName("groupBox_11") + self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_11) + self.gridLayout_2.setObjectName("gridLayout_2") + self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setContentsMargins(-1, 0, -1, -1) - self.gridLayout.setObjectName(_fromUtf8("gridLayout")) - self._CanVisNd = QtGui.QCheckBox(self.groupBox_11) - self._CanVisNd.setObjectName(_fromUtf8("_CanVisNd")) + self.gridLayout.setObjectName("gridLayout") + self._CanVisNd = QtWidgets.QCheckBox(self.groupBox_11) + self._CanVisNd.setObjectName("_CanVisNd") self.gridLayout.addWidget(self._CanVisNd, 0, 0, 1, 1) - self._CanVis1d = QtGui.QCheckBox(self.groupBox_11) - self._CanVis1d.setObjectName(_fromUtf8("_CanVis1d")) + self._CanVis1d = QtWidgets.QCheckBox(self.groupBox_11) + self._CanVis1d.setObjectName("_CanVis1d") self.gridLayout.addWidget(self._CanVis1d, 0, 1, 1, 1) - self._CanVisIm = QtGui.QCheckBox(self.groupBox_11) - self._CanVisIm.setObjectName(_fromUtf8("_CanVisIm")) + self._CanVisIm = QtWidgets.QCheckBox(self.groupBox_11) + self._CanVisIm.setObjectName("_CanVisIm") self.gridLayout.addWidget(self._CanVisIm, 0, 2, 1, 1) self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) self.verticalLayout_27.addWidget(self.groupBox_11) - spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_27.addItem(spacerItem2) self.scrollArea_2.setWidget(self.scrollAreaWidgetContents_3) self.verticalLayout.addWidget(self.scrollArea_2) - self.QuickSettings.addTab(self.q_UI, _fromUtf8("")) - self.q_Ndplt = QtGui.QWidget() - self.q_Ndplt.setObjectName(_fromUtf8("q_Ndplt")) - self.verticalLayout_5 = QtGui.QVBoxLayout(self.q_Ndplt) - self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5")) - self.scrollArea = QtGui.QScrollArea(self.q_Ndplt) + self.QuickSettings.addTab(self.q_UI, "") + self.q_Ndplt = QtWidgets.QWidget() + self.q_Ndplt.setObjectName("q_Ndplt") + self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.q_Ndplt) + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.scrollArea = QtWidgets.QScrollArea(self.q_Ndplt) self.scrollArea.setWidgetResizable(True) - self.scrollArea.setObjectName(_fromUtf8("scrollArea")) - self.scrollAreaWidgetContents_2 = QtGui.QWidget() + self.scrollArea.setObjectName("scrollArea") + self.scrollAreaWidgetContents_2 = QtWidgets.QWidget() self.scrollAreaWidgetContents_2.setGeometry(QtCore.QRect(0, 0, 344, 902)) - self.scrollAreaWidgetContents_2.setObjectName(_fromUtf8("scrollAreaWidgetContents_2")) - self.verticalLayout_19 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_2) - self.verticalLayout_19.setObjectName(_fromUtf8("verticalLayout_19")) - self.groupBox = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.groupBox.setObjectName(_fromUtf8("groupBox")) - self.verticalLayout_7 = QtGui.QVBoxLayout(self.groupBox) - self.verticalLayout_7.setObjectName(_fromUtf8("verticalLayout_7")) - self._ndAxShapePan = QtGui.QFrame(self.groupBox) - self._ndAxShapePan.setFrameShape(QtGui.QFrame.StyledPanel) - self._ndAxShapePan.setFrameShadow(QtGui.QFrame.Raised) - self._ndAxShapePan.setObjectName(_fromUtf8("_ndAxShapePan")) - self.horizontalLayout_11 = QtGui.QHBoxLayout(self._ndAxShapePan) - self.horizontalLayout_11.setObjectName(_fromUtf8("horizontalLayout_11")) - spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2") + self.verticalLayout_19 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_2) + self.verticalLayout_19.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_19.setObjectName("verticalLayout_19") + self.groupBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.groupBox.setObjectName("groupBox") + self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.groupBox) + self.verticalLayout_7.setObjectName("verticalLayout_7") + self._ndAxShapePan = QtWidgets.QFrame(self.groupBox) + self._ndAxShapePan.setFrameShape(QtWidgets.QFrame.StyledPanel) + self._ndAxShapePan.setFrameShadow(QtWidgets.QFrame.Raised) + self._ndAxShapePan.setObjectName("_ndAxShapePan") + self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self._ndAxShapePan) + self.horizontalLayout_11.setObjectName("horizontalLayout_11") + spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_11.addItem(spacerItem3) - self._ndAxShape = QtGui.QLabel(self._ndAxShapePan) - self._ndAxShape.setObjectName(_fromUtf8("_ndAxShape")) + self._ndAxShape = QtWidgets.QLabel(self._ndAxShapePan) + self._ndAxShape.setObjectName("_ndAxShape") self.horizontalLayout_11.addWidget(self._ndAxShape) - spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_11.addItem(spacerItem4) self.verticalLayout_7.addWidget(self._ndAxShapePan) - self._ndAxTimePan = QtGui.QWidget(self.groupBox) + self._ndAxTimePan = QtWidgets.QWidget(self.groupBox) self._ndAxTimePan.setMinimumSize(QtCore.QSize(0, 0)) - self._ndAxTimePan.setObjectName(_fromUtf8("_ndAxTimePan")) - self.horizontalLayout_10 = QtGui.QHBoxLayout(self._ndAxTimePan) - self.horizontalLayout_10.setContentsMargins(0, -1, 0, 0) - self.horizontalLayout_10.setObjectName(_fromUtf8("horizontalLayout_10")) - self.label_13 = QtGui.QLabel(self._ndAxTimePan) - self.label_13.setObjectName(_fromUtf8("label_13")) + self._ndAxTimePan.setObjectName("_ndAxTimePan") + self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self._ndAxTimePan) + self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_10.setObjectName("horizontalLayout_10") + self.label_13 = QtWidgets.QLabel(self._ndAxTimePan) + self.label_13.setObjectName("label_13") self.horizontalLayout_10.addWidget(self.label_13) - self._ndAxTime = QtGui.QComboBox(self._ndAxTimePan) - self._ndAxTime.setObjectName(_fromUtf8("_ndAxTime")) + self._ndAxTime = QtWidgets.QComboBox(self._ndAxTimePan) + self._ndAxTime.setObjectName("_ndAxTime") self.horizontalLayout_10.addWidget(self._ndAxTime) - self._ndAx2dSecText = QtGui.QLabel(self._ndAxTimePan) - self._ndAx2dSecText.setObjectName(_fromUtf8("_ndAx2dSecText")) + self._ndAx2dSecText = QtWidgets.QLabel(self._ndAxTimePan) + self._ndAx2dSecText.setObjectName("_ndAx2dSecText") self.horizontalLayout_10.addWidget(self._ndAx2dSecText) - self._ndAx2d = QtGui.QComboBox(self._ndAxTimePan) - self._ndAx2d.setObjectName(_fromUtf8("_ndAx2d")) + self._ndAx2d = QtWidgets.QComboBox(self._ndAxTimePan) + self._ndAx2d.setObjectName("_ndAx2d") self.horizontalLayout_10.addWidget(self._ndAx2d) - spacerItem5 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_10.addItem(spacerItem5) self.verticalLayout_7.addWidget(self._ndAxTimePan) - self._ndAx2DPan = QtGui.QWidget(self.groupBox) + self._ndAx2DPan = QtWidgets.QWidget(self.groupBox) self._ndAx2DPan.setMinimumSize(QtCore.QSize(0, 0)) - self._ndAx2DPan.setObjectName(_fromUtf8("_ndAx2DPan")) - self.horizontalLayout_12 = QtGui.QHBoxLayout(self._ndAx2DPan) - self.horizontalLayout_12.setMargin(0) - self.horizontalLayout_12.setObjectName(_fromUtf8("horizontalLayout_12")) - self.label_15 = QtGui.QLabel(self._ndAx2DPan) - self.label_15.setObjectName(_fromUtf8("label_15")) + self._ndAx2DPan.setObjectName("_ndAx2DPan") + self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self._ndAx2DPan) + self.horizontalLayout_12.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_12.setObjectName("horizontalLayout_12") + self.label_15 = QtWidgets.QLabel(self._ndAx2DPan) + self.label_15.setObjectName("label_15") self.horizontalLayout_12.addWidget(self.label_15) - self._ndAx2dRows = QtGui.QSpinBox(self._ndAx2DPan) + self._ndAx2dRows = QtWidgets.QSpinBox(self._ndAx2DPan) self._ndAx2dRows.setMaximum(100000) - self._ndAx2dRows.setObjectName(_fromUtf8("_ndAx2dRows")) + self._ndAx2dRows.setObjectName("_ndAx2dRows") self.horizontalLayout_12.addWidget(self._ndAx2dRows) - self._ndAx2dCols = QtGui.QSpinBox(self._ndAx2DPan) + self._ndAx2dCols = QtWidgets.QSpinBox(self._ndAx2DPan) self._ndAx2dCols.setMaximum(100000) - self._ndAx2dCols.setObjectName(_fromUtf8("_ndAx2dCols")) + self._ndAx2dCols.setObjectName("_ndAx2dCols") self.horizontalLayout_12.addWidget(self._ndAx2dCols) - spacerItem6 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_12.addItem(spacerItem6) self.verticalLayout_7.addWidget(self._ndAx2DPan) - self._ndAxNdPan = QtGui.QWidget(self.groupBox) + self._ndAxNdPan = QtWidgets.QWidget(self.groupBox) self._ndAxNdPan.setMinimumSize(QtCore.QSize(0, 0)) - self._ndAxNdPan.setObjectName(_fromUtf8("_ndAxNdPan")) - self.horizontalLayout_13 = QtGui.QHBoxLayout(self._ndAxNdPan) + self._ndAxNdPan.setObjectName("_ndAxNdPan") + self.horizontalLayout_13 = QtWidgets.QHBoxLayout(self._ndAxNdPan) self.horizontalLayout_13.setContentsMargins(0, 0, 0, 9) - self.horizontalLayout_13.setObjectName(_fromUtf8("horizontalLayout_13")) - self.label_14 = QtGui.QLabel(self._ndAxNdPan) - self.label_14.setObjectName(_fromUtf8("label_14")) + self.horizontalLayout_13.setObjectName("horizontalLayout_13") + self.label_14 = QtWidgets.QLabel(self._ndAxNdPan) + self.label_14.setObjectName("label_14") self.horizontalLayout_13.addWidget(self.label_14) - self._ndAxNdRows = QtGui.QComboBox(self._ndAxNdPan) - self._ndAxNdRows.setObjectName(_fromUtf8("_ndAxNdRows")) + self._ndAxNdRows = QtWidgets.QComboBox(self._ndAxNdPan) + self._ndAxNdRows.setObjectName("_ndAxNdRows") self.horizontalLayout_13.addWidget(self._ndAxNdRows) - self.label_19 = QtGui.QLabel(self._ndAxNdPan) - self.label_19.setObjectName(_fromUtf8("label_19")) + self.label_19 = QtWidgets.QLabel(self._ndAxNdPan) + self.label_19.setObjectName("label_19") self.horizontalLayout_13.addWidget(self.label_19) - self._ndAxNdCols = QtGui.QComboBox(self._ndAxNdPan) - self._ndAxNdCols.setObjectName(_fromUtf8("_ndAxNdCols")) + self._ndAxNdCols = QtWidgets.QComboBox(self._ndAxNdPan) + self._ndAxNdCols.setObjectName("_ndAxNdCols") self.horizontalLayout_13.addWidget(self._ndAxNdCols) - spacerItem7 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_13.addItem(spacerItem7) self.verticalLayout_7.addWidget(self._ndAxNdPan) - self._ndAxCheckMsg = QtGui.QLabel(self.groupBox) - self._ndAxCheckMsg.setObjectName(_fromUtf8("_ndAxCheckMsg")) + self._ndAxCheckMsg = QtWidgets.QLabel(self.groupBox) + self._ndAxCheckMsg.setObjectName("_ndAxCheckMsg") self.verticalLayout_7.addWidget(self._ndAxCheckMsg) - self.horizontalLayout_7 = QtGui.QHBoxLayout() + self.horizontalLayout_7 = QtWidgets.QHBoxLayout() self.horizontalLayout_7.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_7.setObjectName(_fromUtf8("horizontalLayout_7")) - spacerItem8 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_7.setObjectName("horizontalLayout_7") + spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_7.addItem(spacerItem8) - self._ndAxUpdate = QtGui.QPushButton(self.groupBox) - self._ndAxUpdate.setObjectName(_fromUtf8("_ndAxUpdate")) + self._ndAxUpdate = QtWidgets.QPushButton(self.groupBox) + self._ndAxUpdate.setObjectName("_ndAxUpdate") self.horizontalLayout_7.addWidget(self._ndAxUpdate) - spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_7.addItem(spacerItem9) self.verticalLayout_7.addLayout(self.horizontalLayout_7) self.verticalLayout_19.addWidget(self.groupBox) - self.horizontalLayout_64 = QtGui.QHBoxLayout() + self.horizontalLayout_64 = QtWidgets.QHBoxLayout() self.horizontalLayout_64.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_64.setSpacing(0) - self.horizontalLayout_64.setObjectName(_fromUtf8("horizontalLayout_64")) - spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_64.setObjectName("horizontalLayout_64") + spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_64.addItem(spacerItem10) - self.line_11 = QtGui.QFrame(self.scrollAreaWidgetContents_2) + self.line_11 = QtWidgets.QFrame(self.scrollAreaWidgetContents_2) self.line_11.setMinimumSize(QtCore.QSize(200, 0)) self.line_11.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_11.setFrameShape(QtGui.QFrame.HLine) - self.line_11.setFrameShadow(QtGui.QFrame.Sunken) - self.line_11.setObjectName(_fromUtf8("line_11")) + self.line_11.setFrameShape(QtWidgets.QFrame.HLine) + self.line_11.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_11.setObjectName("line_11") self.horizontalLayout_64.addWidget(self.line_11) - spacerItem11 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_64.addItem(spacerItem11) self.verticalLayout_19.addLayout(self.horizontalLayout_64) - self.groupBox_2 = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.groupBox_2.setObjectName(_fromUtf8("groupBox_2")) - self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox_2) - self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) - self.widget_2 = QtGui.QWidget(self.groupBox_2) - self.widget_2.setObjectName(_fromUtf8("widget_2")) - self.horizontalLayout_3 = QtGui.QHBoxLayout(self.widget_2) - self.horizontalLayout_3.setContentsMargins(0, -1, 0, 0) - self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) - self.label_coltype = QtGui.QLabel(self.widget_2) - self.label_coltype.setObjectName(_fromUtf8("label_coltype")) + self.groupBox_2 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.groupBox_2.setObjectName("groupBox_2") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.widget_2 = QtWidgets.QWidget(self.groupBox_2) + self.widget_2.setObjectName("widget_2") + self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_2) + self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.label_coltype = QtWidgets.QLabel(self.widget_2) + self.label_coltype.setObjectName("label_coltype") self.horizontalLayout_3.addWidget(self.label_coltype) - self._ndColType = QtGui.QComboBox(self.widget_2) - self._ndColType.setObjectName(_fromUtf8("_ndColType")) - self._ndColType.addItem(_fromUtf8("")) - self._ndColType.addItem(_fromUtf8("")) - self._ndColType.addItem(_fromUtf8("")) - self._ndColType.addItem(_fromUtf8("")) + self._ndColType = QtWidgets.QComboBox(self.widget_2) + self._ndColType.setObjectName("_ndColType") + self._ndColType.addItem("") + self._ndColType.addItem("") + self._ndColType.addItem("") + self._ndColType.addItem("") self.horizontalLayout_3.addWidget(self._ndColType) - spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem12) self.verticalLayout_2.addWidget(self.widget_2) - self._ndRndPan = QtGui.QWidget(self.groupBox_2) - self._ndRndPan.setObjectName(_fromUtf8("_ndRndPan")) - self.horizontalLayout = QtGui.QHBoxLayout(self._ndRndPan) - self.horizontalLayout.setMargin(0) - self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) - self.label_3 = QtGui.QLabel(self._ndRndPan) - self.label_3.setObjectName(_fromUtf8("label_3")) + self._ndRndPan = QtWidgets.QWidget(self.groupBox_2) + self._ndRndPan.setObjectName("_ndRndPan") + self.horizontalLayout = QtWidgets.QHBoxLayout(self._ndRndPan) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.label_3 = QtWidgets.QLabel(self._ndRndPan) + self.label_3.setObjectName("label_3") self.horizontalLayout.addWidget(self.label_3) - self._ndRndDynMin = QtGui.QDoubleSpinBox(self._ndRndPan) + self._ndRndDynMin = QtWidgets.QDoubleSpinBox(self._ndRndPan) self._ndRndDynMin.setMaximum(0.9) self._ndRndDynMin.setSingleStep(0.1) self._ndRndDynMin.setProperty("value", 0.3) - self._ndRndDynMin.setObjectName(_fromUtf8("_ndRndDynMin")) + self._ndRndDynMin.setObjectName("_ndRndDynMin") self.horizontalLayout.addWidget(self._ndRndDynMin) - self._ndRndDynMax = QtGui.QDoubleSpinBox(self._ndRndPan) + self._ndRndDynMax = QtWidgets.QDoubleSpinBox(self._ndRndPan) self._ndRndDynMax.setMinimum(0.1) self._ndRndDynMax.setMaximum(1.0) self._ndRndDynMax.setSingleStep(0.1) self._ndRndDynMax.setProperty("value", 0.9) - self._ndRndDynMax.setObjectName(_fromUtf8("_ndRndDynMax")) + self._ndRndDynMax.setObjectName("_ndRndDynMax") self.horizontalLayout.addWidget(self._ndRndDynMax) - spacerItem13 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem13 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem13) - self._ndRndNew = QtGui.QPushButton(self._ndRndPan) - self._ndRndNew.setObjectName(_fromUtf8("_ndRndNew")) + self._ndRndNew = QtWidgets.QPushButton(self._ndRndPan) + self._ndRndNew.setObjectName("_ndRndNew") self.horizontalLayout.addWidget(self._ndRndNew) self.verticalLayout_2.addWidget(self._ndRndPan) - self._ndUniPan = QtGui.QWidget(self.groupBox_2) + self._ndUniPan = QtWidgets.QWidget(self.groupBox_2) self._ndUniPan.setMinimumSize(QtCore.QSize(0, 0)) - self._ndUniPan.setObjectName(_fromUtf8("_ndUniPan")) - self.horizontalLayout_6 = QtGui.QHBoxLayout(self._ndUniPan) - self.horizontalLayout_6.setMargin(0) - self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6")) - self.label_8 = QtGui.QLabel(self._ndUniPan) - self.label_8.setObjectName(_fromUtf8("label_8")) + self._ndUniPan.setObjectName("_ndUniPan") + self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self._ndUniPan) + self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_6.setObjectName("horizontalLayout_6") + self.label_8 = QtWidgets.QLabel(self._ndUniPan) + self.label_8.setObjectName("label_8") self.horizontalLayout_6.addWidget(self.label_8) - self._ndUniColor = QtGui.QLineEdit(self._ndUniPan) - self._ndUniColor.setObjectName(_fromUtf8("_ndUniColor")) + self._ndUniColor = QtWidgets.QLineEdit(self._ndUniPan) + self._ndUniColor.setObjectName("_ndUniColor") self.horizontalLayout_6.addWidget(self._ndUniColor) self.verticalLayout_2.addWidget(self._ndUniPan) - self._ndDynText = QtGui.QLabel(self.groupBox_2) - self._ndDynText.setObjectName(_fromUtf8("_ndDynText")) + self._ndDynText = QtWidgets.QLabel(self.groupBox_2) + self._ndDynText.setObjectName("_ndDynText") self.verticalLayout_2.addWidget(self._ndDynText) self.verticalLayout_19.addWidget(self.groupBox_2) - self.horizontalLayout_14 = QtGui.QHBoxLayout() + self.horizontalLayout_14 = QtWidgets.QHBoxLayout() self.horizontalLayout_14.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_14.setSpacing(0) - self.horizontalLayout_14.setObjectName(_fromUtf8("horizontalLayout_14")) - spacerItem14 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_14.setObjectName("horizontalLayout_14") + spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_14.addItem(spacerItem14) - self.line_2 = QtGui.QFrame(self.scrollAreaWidgetContents_2) + self.line_2 = QtWidgets.QFrame(self.scrollAreaWidgetContents_2) self.line_2.setMinimumSize(QtCore.QSize(200, 0)) self.line_2.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_2.setFrameShape(QtGui.QFrame.HLine) - self.line_2.setFrameShadow(QtGui.QFrame.Sunken) - self.line_2.setObjectName(_fromUtf8("line_2")) + self.line_2.setFrameShape(QtWidgets.QFrame.HLine) + self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_2.setObjectName("line_2") self.horizontalLayout_14.addWidget(self.line_2) - spacerItem15 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem15 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_14.addItem(spacerItem15) self.verticalLayout_19.addLayout(self.horizontalLayout_14) - self.groupBox_3 = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.groupBox_3.setObjectName(_fromUtf8("groupBox_3")) - self.verticalLayout_20 = QtGui.QVBoxLayout(self.groupBox_3) - self.verticalLayout_20.setObjectName(_fromUtf8("verticalLayout_20")) - self.horizontalLayout_39 = QtGui.QHBoxLayout() + self.groupBox_3 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.groupBox_3.setObjectName("groupBox_3") + self.verticalLayout_20 = QtWidgets.QVBoxLayout(self.groupBox_3) + self.verticalLayout_20.setObjectName("verticalLayout_20") + self.horizontalLayout_39 = QtWidgets.QHBoxLayout() self.horizontalLayout_39.setContentsMargins(-1, -1, 0, -1) - self.horizontalLayout_39.setObjectName(_fromUtf8("horizontalLayout_39")) - self.label_2 = QtGui.QLabel(self.groupBox_3) - self.label_2.setObjectName(_fromUtf8("label_2")) + self.horizontalLayout_39.setObjectName("horizontalLayout_39") + self.label_2 = QtWidgets.QLabel(self.groupBox_3) + self.label_2.setObjectName("label_2") self.horizontalLayout_39.addWidget(self.label_2) - self._ndRtLaps = QtGui.QSpinBox(self.groupBox_3) + self._ndRtLaps = QtWidgets.QSpinBox(self.groupBox_3) self._ndRtLaps.setMaximum(1000000000) self._ndRtLaps.setProperty("value", 1) - self._ndRtLaps.setObjectName(_fromUtf8("_ndRtLaps")) + self._ndRtLaps.setObjectName("_ndRtLaps") self.horizontalLayout_39.addWidget(self._ndRtLaps) - spacerItem16 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_39.addItem(spacerItem16) self.verticalLayout_20.addLayout(self.horizontalLayout_39) - self.horizontalLayout_4 = QtGui.QHBoxLayout() + self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4")) - spacerItem17 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_4.setObjectName("horizontalLayout_4") + spacerItem17 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem17) - self._ndRtStart = QtGui.QPushButton(self.groupBox_3) - self._ndRtStart.setObjectName(_fromUtf8("_ndRtStart")) + self._ndRtStart = QtWidgets.QPushButton(self.groupBox_3) + self._ndRtStart.setObjectName("_ndRtStart") self.horizontalLayout_4.addWidget(self._ndRtStart) - self._ndRtStop = QtGui.QPushButton(self.groupBox_3) - self._ndRtStop.setObjectName(_fromUtf8("_ndRtStop")) + self._ndRtStop = QtWidgets.QPushButton(self.groupBox_3) + self._ndRtStop.setObjectName("_ndRtStop") self.horizontalLayout_4.addWidget(self._ndRtStop) - self._ndRtReset = QtGui.QPushButton(self.groupBox_3) - self._ndRtReset.setObjectName(_fromUtf8("_ndRtReset")) + self._ndRtReset = QtWidgets.QPushButton(self.groupBox_3) + self._ndRtReset.setObjectName("_ndRtReset") self.horizontalLayout_4.addWidget(self._ndRtReset) - spacerItem18 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem18) self.verticalLayout_20.addLayout(self.horizontalLayout_4) self.verticalLayout_19.addWidget(self.groupBox_3) - self.horizontalLayout_36 = QtGui.QHBoxLayout() + self.horizontalLayout_36 = QtWidgets.QHBoxLayout() self.horizontalLayout_36.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_36.setSpacing(0) - self.horizontalLayout_36.setObjectName(_fromUtf8("horizontalLayout_36")) - spacerItem19 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_36.setObjectName("horizontalLayout_36") + spacerItem19 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_36.addItem(spacerItem19) - self.line_5 = QtGui.QFrame(self.scrollAreaWidgetContents_2) + self.line_5 = QtWidgets.QFrame(self.scrollAreaWidgetContents_2) self.line_5.setMinimumSize(QtCore.QSize(200, 0)) self.line_5.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_5.setFrameShape(QtGui.QFrame.HLine) - self.line_5.setFrameShadow(QtGui.QFrame.Sunken) - self.line_5.setObjectName(_fromUtf8("line_5")) + self.line_5.setFrameShape(QtWidgets.QFrame.HLine) + self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_5.setObjectName("line_5") self.horizontalLayout_36.addWidget(self.line_5) - spacerItem20 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem20 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_36.addItem(spacerItem20) self.verticalLayout_19.addLayout(self.horizontalLayout_36) - self.groupBox_4 = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.groupBox_4.setObjectName(_fromUtf8("groupBox_4")) - self.verticalLayout_6 = QtGui.QVBoxLayout(self.groupBox_4) - self.verticalLayout_6.setObjectName(_fromUtf8("verticalLayout_6")) - self.widget_3 = QtGui.QWidget(self.groupBox_4) - self.widget_3.setObjectName(_fromUtf8("widget_3")) - self.horizontalLayout_5 = QtGui.QHBoxLayout(self.widget_3) + self.groupBox_4 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.groupBox_4.setObjectName("groupBox_4") + self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.groupBox_4) + self.verticalLayout_6.setObjectName("verticalLayout_6") + self.widget_3 = QtWidgets.QWidget(self.groupBox_4) + self.widget_3.setObjectName("widget_3") + self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.widget_3) self.horizontalLayout_5.setContentsMargins(0, 9, 0, 0) - self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5")) - self.label_4 = QtGui.QLabel(self.widget_3) - self.label_4.setObjectName(_fromUtf8("label_4")) + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.label_4 = QtWidgets.QLabel(self.widget_3) + self.label_4.setObjectName("label_4") self.horizontalLayout_5.addWidget(self.label_4) - self._ndSetSpace = QtGui.QDoubleSpinBox(self.widget_3) + self._ndSetSpace = QtWidgets.QDoubleSpinBox(self.widget_3) self._ndSetSpace.setMinimum(2.0) self._ndSetSpace.setMaximum(100.0) self._ndSetSpace.setSingleStep(0.1) - self._ndSetSpace.setObjectName(_fromUtf8("_ndSetSpace")) + self._ndSetSpace.setObjectName("_ndSetSpace") self.horizontalLayout_5.addWidget(self._ndSetSpace) - spacerItem21 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem21 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem21) - self.label_9 = QtGui.QLabel(self.widget_3) - self.label_9.setObjectName(_fromUtf8("label_9")) + self.label_9 = QtWidgets.QLabel(self.widget_3) + self.label_9.setObjectName("label_9") self.horizontalLayout_5.addWidget(self.label_9) - self._ndLineWidth = QtGui.QDoubleSpinBox(self.widget_3) + self._ndLineWidth = QtWidgets.QDoubleSpinBox(self.widget_3) self._ndLineWidth.setDecimals(1) self._ndLineWidth.setMinimum(0.1) self._ndLineWidth.setSingleStep(0.1) self._ndLineWidth.setProperty("value", 2.0) - self._ndLineWidth.setObjectName(_fromUtf8("_ndLineWidth")) + self._ndLineWidth.setObjectName("_ndLineWidth") self.horizontalLayout_5.addWidget(self._ndLineWidth) - spacerItem22 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem22 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem22) self.verticalLayout_6.addWidget(self.widget_3) - self.widget = QtGui.QWidget(self.groupBox_4) + self.widget = QtWidgets.QWidget(self.groupBox_4) self.widget.setMinimumSize(QtCore.QSize(0, 0)) - self.widget.setObjectName(_fromUtf8("widget")) - self.horizontalLayout_9 = QtGui.QHBoxLayout(self.widget) - self.horizontalLayout_9.setMargin(0) - self.horizontalLayout_9.setObjectName(_fromUtf8("horizontalLayout_9")) - self.label_12 = QtGui.QLabel(self.widget) - self.label_12.setObjectName(_fromUtf8("label_12")) + self.widget.setObjectName("widget") + self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.widget) + self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_9.setObjectName("horizontalLayout_9") + self.label_12 = QtWidgets.QLabel(self.widget) + self.label_12.setObjectName("label_12") self.horizontalLayout_9.addWidget(self.label_12) - self._ndScaleX = QtGui.QDoubleSpinBox(self.widget) + self._ndScaleX = QtWidgets.QDoubleSpinBox(self.widget) self._ndScaleX.setSingleStep(0.1) self._ndScaleX.setProperty("value", 1.0) - self._ndScaleX.setObjectName(_fromUtf8("_ndScaleX")) + self._ndScaleX.setObjectName("_ndScaleX") self.horizontalLayout_9.addWidget(self._ndScaleX) - self._ndScaleY = QtGui.QDoubleSpinBox(self.widget) + self._ndScaleY = QtWidgets.QDoubleSpinBox(self.widget) self._ndScaleY.setSingleStep(0.1) self._ndScaleY.setProperty("value", 1.0) - self._ndScaleY.setObjectName(_fromUtf8("_ndScaleY")) + self._ndScaleY.setObjectName("_ndScaleY") self.horizontalLayout_9.addWidget(self._ndScaleY) - spacerItem23 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem23 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_9.addItem(spacerItem23) self.verticalLayout_6.addWidget(self.widget) self.verticalLayout_19.addWidget(self.groupBox_4) - self.horizontalLayout_95 = QtGui.QHBoxLayout() + self.horizontalLayout_95 = QtWidgets.QHBoxLayout() self.horizontalLayout_95.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_95.setSpacing(0) - self.horizontalLayout_95.setObjectName(_fromUtf8("horizontalLayout_95")) - spacerItem24 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_95.setObjectName("horizontalLayout_95") + spacerItem24 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_95.addItem(spacerItem24) - self.line_18 = QtGui.QFrame(self.scrollAreaWidgetContents_2) + self.line_18 = QtWidgets.QFrame(self.scrollAreaWidgetContents_2) self.line_18.setMinimumSize(QtCore.QSize(200, 0)) self.line_18.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_18.setFrameShape(QtGui.QFrame.HLine) - self.line_18.setFrameShadow(QtGui.QFrame.Sunken) - self.line_18.setObjectName(_fromUtf8("line_18")) + self.line_18.setFrameShape(QtWidgets.QFrame.HLine) + self.line_18.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_18.setObjectName("line_18") self.horizontalLayout_95.addWidget(self.line_18) - spacerItem25 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem25 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_95.addItem(spacerItem25) self.verticalLayout_19.addLayout(self.horizontalLayout_95) - self.groupBox_15 = QtGui.QGroupBox(self.scrollAreaWidgetContents_2) - self.groupBox_15.setObjectName(_fromUtf8("groupBox_15")) - self.verticalLayout_25 = QtGui.QVBoxLayout(self.groupBox_15) - self.verticalLayout_25.setObjectName(_fromUtf8("verticalLayout_25")) - self.gridLayout_3 = QtGui.QGridLayout() + self.groupBox_15 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_2) + self.groupBox_15.setObjectName("groupBox_15") + self.verticalLayout_25 = QtWidgets.QVBoxLayout(self.groupBox_15) + self.verticalLayout_25.setObjectName("verticalLayout_25") + self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) - self._ndXlabEdit = QtGui.QLineEdit(self.groupBox_15) - self._ndXlabEdit.setObjectName(_fromUtf8("_ndXlabEdit")) + self.gridLayout_3.setObjectName("gridLayout_3") + self._ndXlabEdit = QtWidgets.QLineEdit(self.groupBox_15) + self._ndXlabEdit.setObjectName("_ndXlabEdit") self.gridLayout_3.addWidget(self._ndXlabEdit, 2, 1, 1, 1) - self.label_16 = QtGui.QLabel(self.groupBox_15) - self.label_16.setObjectName(_fromUtf8("label_16")) + self.label_16 = QtWidgets.QLabel(self.groupBox_15) + self.label_16.setObjectName("label_16") self.gridLayout_3.addWidget(self.label_16, 1, 0, 1, 1) - self.label_39 = QtGui.QLabel(self.groupBox_15) - self.label_39.setObjectName(_fromUtf8("label_39")) + self.label_39 = QtWidgets.QLabel(self.groupBox_15) + self.label_39.setObjectName("label_39") self.gridLayout_3.addWidget(self.label_39, 3, 0, 1, 1) - self.label_17 = QtGui.QLabel(self.groupBox_15) - self.label_17.setObjectName(_fromUtf8("label_17")) + self.label_17 = QtWidgets.QLabel(self.groupBox_15) + self.label_17.setObjectName("label_17") self.gridLayout_3.addWidget(self.label_17, 2, 0, 1, 1) - self._ndYlabEdit = QtGui.QLineEdit(self.groupBox_15) - self._ndYlabEdit.setObjectName(_fromUtf8("_ndYlabEdit")) + self._ndYlabEdit = QtWidgets.QLineEdit(self.groupBox_15) + self._ndYlabEdit.setObjectName("_ndYlabEdit") self.gridLayout_3.addWidget(self._ndYlabEdit, 3, 1, 1, 1) - self._ndTitleEdit = QtGui.QLineEdit(self.groupBox_15) - self._ndTitleEdit.setObjectName(_fromUtf8("_ndTitleEdit")) + self._ndTitleEdit = QtWidgets.QLineEdit(self.groupBox_15) + self._ndTitleEdit.setObjectName("_ndTitleEdit") self.gridLayout_3.addWidget(self._ndTitleEdit, 1, 1, 1, 1) - self._ndGridTog = QtGui.QCheckBox(self.groupBox_15) - self._ndGridTog.setObjectName(_fromUtf8("_ndGridTog")) + self._ndGridTog = QtWidgets.QCheckBox(self.groupBox_15) + self._ndGridTog.setObjectName("_ndGridTog") self.gridLayout_3.addWidget(self._ndGridTog, 0, 0, 1, 1) self.verticalLayout_25.addLayout(self.gridLayout_3) self.verticalLayout_19.addWidget(self.groupBox_15) - spacerItem26 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem26 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_19.addItem(spacerItem26) self.scrollArea.setWidget(self.scrollAreaWidgetContents_2) self.verticalLayout_5.addWidget(self.scrollArea) - self.QuickSettings.addTab(self.q_Ndplt, _fromUtf8("")) - self.q_1dPlt = QtGui.QWidget() - self.q_1dPlt.setObjectName(_fromUtf8("q_1dPlt")) - self.verticalLayout_3 = QtGui.QVBoxLayout(self.q_1dPlt) - self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) - self._1dPltTab = QtGui.QTabWidget(self.q_1dPlt) - self._1dPltTab.setObjectName(_fromUtf8("_1dPltTab")) - self._1dSigTab = QtGui.QWidget() - self._1dSigTab.setObjectName(_fromUtf8("_1dSigTab")) - self.verticalLayout_69 = QtGui.QVBoxLayout(self._1dSigTab) - self.verticalLayout_69.setObjectName(_fromUtf8("verticalLayout_69")) - self.scrollArea_8 = QtGui.QScrollArea(self._1dSigTab) + self.QuickSettings.addTab(self.q_Ndplt, "") + self.q_1dPlt = QtWidgets.QWidget() + self.q_1dPlt.setObjectName("q_1dPlt") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.q_1dPlt) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self._1dPltTab = QtWidgets.QTabWidget(self.q_1dPlt) + self._1dPltTab.setObjectName("_1dPltTab") + self._1dSigTab = QtWidgets.QWidget() + self._1dSigTab.setObjectName("_1dSigTab") + self.verticalLayout_69 = QtWidgets.QVBoxLayout(self._1dSigTab) + self.verticalLayout_69.setObjectName("verticalLayout_69") + self.scrollArea_8 = QtWidgets.QScrollArea(self._1dSigTab) self.scrollArea_8.setWidgetResizable(True) - self.scrollArea_8.setObjectName(_fromUtf8("scrollArea_8")) - self.scrollAreaWidgetContents_9 = QtGui.QWidget() + self.scrollArea_8.setObjectName("scrollArea_8") + self.scrollAreaWidgetContents_9 = QtWidgets.QWidget() self.scrollAreaWidgetContents_9.setGeometry(QtCore.QRect(0, 0, 329, 944)) - self.scrollAreaWidgetContents_9.setObjectName(_fromUtf8("scrollAreaWidgetContents_9")) - self.verticalLayout_59 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_9) - self.verticalLayout_59.setObjectName(_fromUtf8("verticalLayout_59")) - self.groupBox_32 = QtGui.QGroupBox(self.scrollAreaWidgetContents_9) - self.groupBox_32.setObjectName(_fromUtf8("groupBox_32")) - self.verticalLayout_61 = QtGui.QVBoxLayout(self.groupBox_32) - self.verticalLayout_61.setObjectName(_fromUtf8("verticalLayout_61")) - self._ndAxShapePan_6 = QtGui.QFrame(self.groupBox_32) - self._ndAxShapePan_6.setFrameShape(QtGui.QFrame.StyledPanel) - self._ndAxShapePan_6.setFrameShadow(QtGui.QFrame.Raised) - self._ndAxShapePan_6.setObjectName(_fromUtf8("_ndAxShapePan_6")) - self.horizontalLayout_101 = QtGui.QHBoxLayout(self._ndAxShapePan_6) - self.horizontalLayout_101.setObjectName(_fromUtf8("horizontalLayout_101")) - spacerItem27 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.scrollAreaWidgetContents_9.setObjectName("scrollAreaWidgetContents_9") + self.verticalLayout_59 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_9) + self.verticalLayout_59.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_59.setObjectName("verticalLayout_59") + self.groupBox_32 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_9) + self.groupBox_32.setObjectName("groupBox_32") + self.verticalLayout_61 = QtWidgets.QVBoxLayout(self.groupBox_32) + self.verticalLayout_61.setObjectName("verticalLayout_61") + self._ndAxShapePan_6 = QtWidgets.QFrame(self.groupBox_32) + self._ndAxShapePan_6.setFrameShape(QtWidgets.QFrame.StyledPanel) + self._ndAxShapePan_6.setFrameShadow(QtWidgets.QFrame.Raised) + self._ndAxShapePan_6.setObjectName("_ndAxShapePan_6") + self.horizontalLayout_101 = QtWidgets.QHBoxLayout(self._ndAxShapePan_6) + self.horizontalLayout_101.setObjectName("horizontalLayout_101") + spacerItem27 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_101.addItem(spacerItem27) - self._1dAxShape = QtGui.QLabel(self._ndAxShapePan_6) - self._1dAxShape.setObjectName(_fromUtf8("_1dAxShape")) + self._1dAxShape = QtWidgets.QLabel(self._ndAxShapePan_6) + self._1dAxShape.setObjectName("_1dAxShape") self.horizontalLayout_101.addWidget(self._1dAxShape) - spacerItem28 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem28 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_101.addItem(spacerItem28) self.verticalLayout_61.addWidget(self._ndAxShapePan_6) - self.gridLayout_14 = QtGui.QGridLayout() + self.gridLayout_14 = QtWidgets.QGridLayout() self.gridLayout_14.setContentsMargins(-1, 20, -1, -1) - self.gridLayout_14.setObjectName(_fromUtf8("gridLayout_14")) - spacerItem29 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_14.setObjectName("gridLayout_14") + spacerItem29 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_14.addItem(spacerItem29, 1, 5, 1, 1) - self.label_97 = QtGui.QLabel(self.groupBox_32) - self.label_97.setObjectName(_fromUtf8("label_97")) + self.label_97 = QtWidgets.QLabel(self.groupBox_32) + self.label_97.setObjectName("label_97") self.gridLayout_14.addWidget(self.label_97, 1, 0, 1, 1) - self.label_96 = QtGui.QLabel(self.groupBox_32) - self.label_96.setObjectName(_fromUtf8("label_96")) + self.label_96 = QtWidgets.QLabel(self.groupBox_32) + self.label_96.setObjectName("label_96") self.gridLayout_14.addWidget(self.label_96, 0, 0, 1, 1) - self.label_98 = QtGui.QLabel(self.groupBox_32) - self.label_98.setObjectName(_fromUtf8("label_98")) + self.label_98 = QtWidgets.QLabel(self.groupBox_32) + self.label_98.setObjectName("label_98") self.gridLayout_14.addWidget(self.label_98, 1, 3, 1, 1) - self._1dAxInd = QtGui.QSpinBox(self.groupBox_32) - self._1dAxInd.setObjectName(_fromUtf8("_1dAxInd")) + self._1dAxInd = QtWidgets.QSpinBox(self.groupBox_32) + self._1dAxInd.setObjectName("_1dAxInd") self.gridLayout_14.addWidget(self._1dAxInd, 1, 4, 1, 1) - spacerItem30 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem30 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_14.addItem(spacerItem30, 1, 2, 1, 1) - self._1dAxY = QtGui.QComboBox(self.groupBox_32) - self._1dAxY.setObjectName(_fromUtf8("_1dAxY")) + self._1dAxY = QtWidgets.QComboBox(self.groupBox_32) + self._1dAxY.setObjectName("_1dAxY") self.gridLayout_14.addWidget(self._1dAxY, 1, 1, 1, 1) - self._1dAxX = QtGui.QComboBox(self.groupBox_32) - self._1dAxX.setObjectName(_fromUtf8("_1dAxX")) + self._1dAxX = QtWidgets.QComboBox(self.groupBox_32) + self._1dAxX.setObjectName("_1dAxX") self.gridLayout_14.addWidget(self._1dAxX, 0, 1, 1, 1) self.verticalLayout_61.addLayout(self.gridLayout_14) - self._1dAxCheckTxt = QtGui.QLabel(self.groupBox_32) - self._1dAxCheckTxt.setObjectName(_fromUtf8("_1dAxCheckTxt")) + self._1dAxCheckTxt = QtWidgets.QLabel(self.groupBox_32) + self._1dAxCheckTxt.setObjectName("_1dAxCheckTxt") self.verticalLayout_61.addWidget(self._1dAxCheckTxt) self.verticalLayout_59.addWidget(self.groupBox_32) - self.horizontalLayout_105 = QtGui.QHBoxLayout() + self.horizontalLayout_105 = QtWidgets.QHBoxLayout() self.horizontalLayout_105.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_105.setSpacing(0) - self.horizontalLayout_105.setObjectName(_fromUtf8("horizontalLayout_105")) - spacerItem31 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_105.setObjectName("horizontalLayout_105") + spacerItem31 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_105.addItem(spacerItem31) - self.line_19 = QtGui.QFrame(self.scrollAreaWidgetContents_9) + self.line_19 = QtWidgets.QFrame(self.scrollAreaWidgetContents_9) self.line_19.setMinimumSize(QtCore.QSize(200, 0)) self.line_19.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_19.setFrameShape(QtGui.QFrame.HLine) - self.line_19.setFrameShadow(QtGui.QFrame.Sunken) - self.line_19.setObjectName(_fromUtf8("line_19")) + self.line_19.setFrameShape(QtWidgets.QFrame.HLine) + self.line_19.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_19.setObjectName("line_19") self.horizontalLayout_105.addWidget(self.line_19) - spacerItem32 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem32 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_105.addItem(spacerItem32) self.verticalLayout_59.addLayout(self.horizontalLayout_105) - self.groupBox_33 = QtGui.QGroupBox(self.scrollAreaWidgetContents_9) - self.groupBox_33.setObjectName(_fromUtf8("groupBox_33")) - self.gridLayout_12 = QtGui.QGridLayout(self.groupBox_33) - self.gridLayout_12.setObjectName(_fromUtf8("gridLayout_12")) - self._1dPltSpec = QtGui.QWidget(self.groupBox_33) - self._1dPltSpec.setObjectName(_fromUtf8("_1dPltSpec")) - self.horizontalLayout_104 = QtGui.QHBoxLayout(self._1dPltSpec) - self.horizontalLayout_104.setMargin(0) - self.horizontalLayout_104.setObjectName(_fromUtf8("horizontalLayout_104")) - self.gridLayout_16 = QtGui.QGridLayout() + self.groupBox_33 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_9) + self.groupBox_33.setObjectName("groupBox_33") + self.gridLayout_12 = QtWidgets.QGridLayout(self.groupBox_33) + self.gridLayout_12.setObjectName("gridLayout_12") + self._1dPltSpec = QtWidgets.QWidget(self.groupBox_33) + self._1dPltSpec.setObjectName("_1dPltSpec") + self.horizontalLayout_104 = QtWidgets.QHBoxLayout(self._1dPltSpec) + self.horizontalLayout_104.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_104.setObjectName("horizontalLayout_104") + self.gridLayout_16 = QtWidgets.QGridLayout() self.gridLayout_16.setContentsMargins(0, -1, -1, -1) - self.gridLayout_16.setObjectName(_fromUtf8("gridLayout_16")) - self.label_100 = QtGui.QLabel(self._1dPltSpec) - self.label_100.setObjectName(_fromUtf8("label_100")) + self.gridLayout_16.setObjectName("gridLayout_16") + self.label_100 = QtWidgets.QLabel(self._1dPltSpec) + self.label_100.setObjectName("label_100") self.gridLayout_16.addWidget(self.label_100, 0, 0, 1, 1) - self._1dPltNfft = QtGui.QSpinBox(self._1dPltSpec) + self._1dPltNfft = QtWidgets.QSpinBox(self._1dPltSpec) self._1dPltNfft.setMaximum(10000) self._1dPltNfft.setSingleStep(32) self._1dPltNfft.setProperty("value", 256) - self._1dPltNfft.setObjectName(_fromUtf8("_1dPltNfft")) + self._1dPltNfft.setObjectName("_1dPltNfft") self.gridLayout_16.addWidget(self._1dPltNfft, 0, 1, 1, 1) - self._1dPltStep = QtGui.QSpinBox(self._1dPltSpec) + self._1dPltStep = QtWidgets.QSpinBox(self._1dPltSpec) self._1dPltStep.setMaximum(10000) self._1dPltStep.setSingleStep(32) self._1dPltStep.setProperty("value", 128) - self._1dPltStep.setObjectName(_fromUtf8("_1dPltStep")) + self._1dPltStep.setObjectName("_1dPltStep") self.gridLayout_16.addWidget(self._1dPltStep, 0, 3, 1, 1) - self.label_102 = QtGui.QLabel(self._1dPltSpec) - self.label_102.setObjectName(_fromUtf8("label_102")) + self.label_102 = QtWidgets.QLabel(self._1dPltSpec) + self.label_102.setObjectName("label_102") self.gridLayout_16.addWidget(self.label_102, 0, 2, 1, 1) - self.label = QtGui.QLabel(self._1dPltSpec) - self.label.setObjectName(_fromUtf8("label")) + self.label = QtWidgets.QLabel(self._1dPltSpec) + self.label.setObjectName("label") self.gridLayout_16.addWidget(self.label, 1, 0, 1, 1) - self.label_130 = QtGui.QLabel(self._1dPltSpec) - self.label_130.setObjectName(_fromUtf8("label_130")) + self.label_130 = QtWidgets.QLabel(self._1dPltSpec) + self.label_130.setObjectName("label_130") self.gridLayout_16.addWidget(self.label_130, 1, 2, 1, 1) - self._1dPltfStart = QtGui.QDoubleSpinBox(self._1dPltSpec) + self._1dPltfStart = QtWidgets.QDoubleSpinBox(self._1dPltSpec) self._1dPltfStart.setMaximum(10000.0) - self._1dPltfStart.setObjectName(_fromUtf8("_1dPltfStart")) + self._1dPltfStart.setObjectName("_1dPltfStart") self.gridLayout_16.addWidget(self._1dPltfStart, 1, 1, 1, 1) - self._1dPltfEnd = QtGui.QDoubleSpinBox(self._1dPltSpec) + self._1dPltfEnd = QtWidgets.QDoubleSpinBox(self._1dPltSpec) self._1dPltfEnd.setMaximum(10000.0) - self._1dPltfEnd.setObjectName(_fromUtf8("_1dPltfEnd")) + self._1dPltfEnd.setObjectName("_1dPltfEnd") self.gridLayout_16.addWidget(self._1dPltfEnd, 1, 3, 1, 1) self.horizontalLayout_104.addLayout(self.gridLayout_16) self.gridLayout_12.addWidget(self._1dPltSpec, 3, 0, 1, 1) - self.horizontalLayout_96 = QtGui.QHBoxLayout() + self.horizontalLayout_96 = QtWidgets.QHBoxLayout() self.horizontalLayout_96.setContentsMargins(-1, 0, -1, 6) self.horizontalLayout_96.setSpacing(6) - self.horizontalLayout_96.setObjectName(_fromUtf8("horizontalLayout_96")) - self.label_91 = QtGui.QLabel(self.groupBox_33) - self.label_91.setObjectName(_fromUtf8("label_91")) + self.horizontalLayout_96.setObjectName("horizontalLayout_96") + self.label_91 = QtWidgets.QLabel(self.groupBox_33) + self.label_91.setObjectName("label_91") self.horizontalLayout_96.addWidget(self.label_91) - self._1dPltPick = QtGui.QComboBox(self.groupBox_33) - self._1dPltPick.setObjectName(_fromUtf8("_1dPltPick")) - self._1dPltPick.addItem(_fromUtf8("")) - self._1dPltPick.addItem(_fromUtf8("")) - self._1dPltPick.addItem(_fromUtf8("")) - self._1dPltPick.addItem(_fromUtf8("")) + self._1dPltPick = QtWidgets.QComboBox(self.groupBox_33) + self._1dPltPick.setObjectName("_1dPltPick") + self._1dPltPick.addItem("") + self._1dPltPick.addItem("") + self._1dPltPick.addItem("") + self._1dPltPick.addItem("") self.horizontalLayout_96.addWidget(self._1dPltPick) - spacerItem33 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem33 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_96.addItem(spacerItem33) self.gridLayout_12.addLayout(self.horizontalLayout_96, 0, 0, 1, 1) - self._1dPltHist = QtGui.QWidget(self.groupBox_33) - self._1dPltHist.setObjectName(_fromUtf8("_1dPltHist")) - self.horizontalLayout_97 = QtGui.QHBoxLayout(self._1dPltHist) - self.horizontalLayout_97.setMargin(0) - self.horizontalLayout_97.setObjectName(_fromUtf8("horizontalLayout_97")) - self.label_92 = QtGui.QLabel(self._1dPltHist) - self.label_92.setObjectName(_fromUtf8("label_92")) + self._1dPltHist = QtWidgets.QWidget(self.groupBox_33) + self._1dPltHist.setObjectName("_1dPltHist") + self.horizontalLayout_97 = QtWidgets.QHBoxLayout(self._1dPltHist) + self.horizontalLayout_97.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_97.setObjectName("horizontalLayout_97") + self.label_92 = QtWidgets.QLabel(self._1dPltHist) + self.label_92.setObjectName("label_92") self.horizontalLayout_97.addWidget(self.label_92) - self._1dPltBins = QtGui.QSpinBox(self._1dPltHist) + self._1dPltBins = QtWidgets.QSpinBox(self._1dPltHist) self._1dPltBins.setMinimum(1) self._1dPltBins.setMaximum(10000) self._1dPltBins.setProperty("value", 10) - self._1dPltBins.setObjectName(_fromUtf8("_1dPltBins")) + self._1dPltBins.setObjectName("_1dPltBins") self.horizontalLayout_97.addWidget(self._1dPltBins) - spacerItem34 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem34 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_97.addItem(spacerItem34) self.gridLayout_12.addWidget(self._1dPltHist, 2, 0, 1, 1) - self._1dPltLine = QtGui.QWidget(self.groupBox_33) - self._1dPltLine.setObjectName(_fromUtf8("_1dPltLine")) - self.horizontalLayout_103 = QtGui.QHBoxLayout(self._1dPltLine) - self.horizontalLayout_103.setMargin(0) - self.horizontalLayout_103.setObjectName(_fromUtf8("horizontalLayout_103")) - self.label_99 = QtGui.QLabel(self._1dPltLine) - self.label_99.setObjectName(_fromUtf8("label_99")) + self._1dPltLine = QtWidgets.QWidget(self.groupBox_33) + self._1dPltLine.setObjectName("_1dPltLine") + self.horizontalLayout_103 = QtWidgets.QHBoxLayout(self._1dPltLine) + self.horizontalLayout_103.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_103.setObjectName("horizontalLayout_103") + self.label_99 = QtWidgets.QLabel(self._1dPltLine) + self.label_99.setObjectName("label_99") self.horizontalLayout_103.addWidget(self.label_99) - self._1dLineWidth = QtGui.QDoubleSpinBox(self._1dPltLine) + self._1dLineWidth = QtWidgets.QDoubleSpinBox(self._1dPltLine) self._1dLineWidth.setDecimals(1) self._1dLineWidth.setMinimum(0.1) self._1dLineWidth.setMaximum(100.0) self._1dLineWidth.setSingleStep(0.1) self._1dLineWidth.setProperty("value", 1.0) - self._1dLineWidth.setObjectName(_fromUtf8("_1dLineWidth")) + self._1dLineWidth.setObjectName("_1dLineWidth") self.horizontalLayout_103.addWidget(self._1dLineWidth) - spacerItem35 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem35 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_103.addItem(spacerItem35) - self.label_101 = QtGui.QLabel(self._1dPltLine) - self.label_101.setObjectName(_fromUtf8("label_101")) + self.label_101 = QtWidgets.QLabel(self._1dPltLine) + self.label_101.setObjectName("label_101") self.horizontalLayout_103.addWidget(self.label_101) - self._1dLineMeth = QtGui.QComboBox(self._1dPltLine) - self._1dLineMeth.setObjectName(_fromUtf8("_1dLineMeth")) - self._1dLineMeth.addItem(_fromUtf8("")) - self._1dLineMeth.addItem(_fromUtf8("")) + self._1dLineMeth = QtWidgets.QComboBox(self._1dPltLine) + self._1dLineMeth.setObjectName("_1dLineMeth") + self._1dLineMeth.addItem("") + self._1dLineMeth.addItem("") self.horizontalLayout_103.addWidget(self._1dLineMeth) - spacerItem36 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem36 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_103.addItem(spacerItem36) self.gridLayout_12.addWidget(self._1dPltLine, 1, 0, 1, 1) - self._1dPltMark = QtGui.QWidget(self.groupBox_33) - self._1dPltMark.setObjectName(_fromUtf8("_1dPltMark")) - self.horizontalLayout_122 = QtGui.QHBoxLayout(self._1dPltMark) - self.horizontalLayout_122.setContentsMargins(0, 0, 0, -1) - self.horizontalLayout_122.setObjectName(_fromUtf8("horizontalLayout_122")) - self.label_120 = QtGui.QLabel(self._1dPltMark) - self.label_120.setObjectName(_fromUtf8("label_120")) + self._1dPltMark = QtWidgets.QWidget(self.groupBox_33) + self._1dPltMark.setObjectName("_1dPltMark") + self.horizontalLayout_122 = QtWidgets.QHBoxLayout(self._1dPltMark) + self.horizontalLayout_122.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_122.setObjectName("horizontalLayout_122") + self.label_120 = QtWidgets.QLabel(self._1dPltMark) + self.label_120.setObjectName("label_120") self.horizontalLayout_122.addWidget(self.label_120) - self._1dMarkSize = QtGui.QDoubleSpinBox(self._1dPltMark) + self._1dMarkSize = QtWidgets.QDoubleSpinBox(self._1dPltMark) self._1dMarkSize.setDecimals(1) self._1dMarkSize.setMinimum(0.1) self._1dMarkSize.setMaximum(1000.0) - self._1dMarkSize.setObjectName(_fromUtf8("_1dMarkSize")) + self._1dMarkSize.setObjectName("_1dMarkSize") self.horizontalLayout_122.addWidget(self._1dMarkSize) - spacerItem37 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem37 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_122.addItem(spacerItem37) self.gridLayout_12.addWidget(self._1dPltMark, 4, 0, 1, 1) self.verticalLayout_59.addWidget(self.groupBox_33) - self.horizontalLayout_106 = QtGui.QHBoxLayout() + self.horizontalLayout_106 = QtWidgets.QHBoxLayout() self.horizontalLayout_106.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_106.setSpacing(0) - self.horizontalLayout_106.setObjectName(_fromUtf8("horizontalLayout_106")) - spacerItem38 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_106.setObjectName("horizontalLayout_106") + spacerItem38 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_106.addItem(spacerItem38) - self.line_20 = QtGui.QFrame(self.scrollAreaWidgetContents_9) + self.line_20 = QtWidgets.QFrame(self.scrollAreaWidgetContents_9) self.line_20.setMinimumSize(QtCore.QSize(200, 0)) self.line_20.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_20.setFrameShape(QtGui.QFrame.HLine) - self.line_20.setFrameShadow(QtGui.QFrame.Sunken) - self.line_20.setObjectName(_fromUtf8("line_20")) + self.line_20.setFrameShape(QtWidgets.QFrame.HLine) + self.line_20.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_20.setObjectName("line_20") self.horizontalLayout_106.addWidget(self.line_20) - spacerItem39 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem39 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_106.addItem(spacerItem39) self.verticalLayout_59.addLayout(self.horizontalLayout_106) - self._1dColBox = QtGui.QGroupBox(self.scrollAreaWidgetContents_9) - self._1dColBox.setObjectName(_fromUtf8("_1dColBox")) - self.verticalLayout_60 = QtGui.QVBoxLayout(self._1dColBox) - self.verticalLayout_60.setObjectName(_fromUtf8("verticalLayout_60")) - self._1dColPickType = QtGui.QWidget(self._1dColBox) - self._1dColPickType.setObjectName(_fromUtf8("_1dColPickType")) - self.horizontalLayout_98 = QtGui.QHBoxLayout(self._1dColPickType) - self.horizontalLayout_98.setMargin(0) - self.horizontalLayout_98.setObjectName(_fromUtf8("horizontalLayout_98")) - self.label_93 = QtGui.QLabel(self._1dColPickType) - self.label_93.setObjectName(_fromUtf8("label_93")) + self._1dColBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_9) + self._1dColBox.setObjectName("_1dColBox") + self.verticalLayout_60 = QtWidgets.QVBoxLayout(self._1dColBox) + self.verticalLayout_60.setObjectName("verticalLayout_60") + self._1dColPickType = QtWidgets.QWidget(self._1dColBox) + self._1dColPickType.setObjectName("_1dColPickType") + self.horizontalLayout_98 = QtWidgets.QHBoxLayout(self._1dColPickType) + self.horizontalLayout_98.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_98.setObjectName("horizontalLayout_98") + self.label_93 = QtWidgets.QLabel(self._1dColPickType) + self.label_93.setObjectName("label_93") self.horizontalLayout_98.addWidget(self.label_93) - self._1dColType = QtGui.QComboBox(self._1dColPickType) - self._1dColType.setObjectName(_fromUtf8("_1dColType")) - self._1dColType.addItem(_fromUtf8("")) - self._1dColType.addItem(_fromUtf8("")) - self._1dColType.addItem(_fromUtf8("")) - self._1dColType.addItem(_fromUtf8("")) + self._1dColType = QtWidgets.QComboBox(self._1dColPickType) + self._1dColType.setObjectName("_1dColType") + self._1dColType.addItem("") + self._1dColType.addItem("") + self._1dColType.addItem("") + self._1dColType.addItem("") self.horizontalLayout_98.addWidget(self._1dColType) - spacerItem40 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem40 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_98.addItem(spacerItem40) self.verticalLayout_60.addWidget(self._1dColPickType) - self._1dRndPan = QtGui.QWidget(self._1dColBox) - self._1dRndPan.setObjectName(_fromUtf8("_1dRndPan")) - self.horizontalLayout_99 = QtGui.QHBoxLayout(self._1dRndPan) - self.horizontalLayout_99.setMargin(0) - self.horizontalLayout_99.setObjectName(_fromUtf8("horizontalLayout_99")) - self.label_94 = QtGui.QLabel(self._1dRndPan) - self.label_94.setObjectName(_fromUtf8("label_94")) + self._1dRndPan = QtWidgets.QWidget(self._1dColBox) + self._1dRndPan.setObjectName("_1dRndPan") + self.horizontalLayout_99 = QtWidgets.QHBoxLayout(self._1dRndPan) + self.horizontalLayout_99.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_99.setObjectName("horizontalLayout_99") + self.label_94 = QtWidgets.QLabel(self._1dRndPan) + self.label_94.setObjectName("label_94") self.horizontalLayout_99.addWidget(self.label_94) - self._1dRndDynMin = QtGui.QDoubleSpinBox(self._1dRndPan) + self._1dRndDynMin = QtWidgets.QDoubleSpinBox(self._1dRndPan) self._1dRndDynMin.setMaximum(0.9) self._1dRndDynMin.setSingleStep(0.1) self._1dRndDynMin.setProperty("value", 0.3) - self._1dRndDynMin.setObjectName(_fromUtf8("_1dRndDynMin")) + self._1dRndDynMin.setObjectName("_1dRndDynMin") self.horizontalLayout_99.addWidget(self._1dRndDynMin) - self._1dRndDynMax = QtGui.QDoubleSpinBox(self._1dRndPan) + self._1dRndDynMax = QtWidgets.QDoubleSpinBox(self._1dRndPan) self._1dRndDynMax.setMinimum(0.1) self._1dRndDynMax.setMaximum(1.0) self._1dRndDynMax.setSingleStep(0.1) self._1dRndDynMax.setProperty("value", 0.9) - self._1dRndDynMax.setObjectName(_fromUtf8("_1dRndDynMax")) + self._1dRndDynMax.setObjectName("_1dRndDynMax") self.horizontalLayout_99.addWidget(self._1dRndDynMax) - spacerItem41 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem41 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_99.addItem(spacerItem41) - self._1dRndNew = QtGui.QPushButton(self._1dRndPan) - self._1dRndNew.setObjectName(_fromUtf8("_1dRndNew")) + self._1dRndNew = QtWidgets.QPushButton(self._1dRndPan) + self._1dRndNew.setObjectName("_1dRndNew") self.horizontalLayout_99.addWidget(self._1dRndNew) self.verticalLayout_60.addWidget(self._1dRndPan) - self._1dUniPan = QtGui.QWidget(self._1dColBox) + self._1dUniPan = QtWidgets.QWidget(self._1dColBox) self._1dUniPan.setMinimumSize(QtCore.QSize(0, 0)) - self._1dUniPan.setObjectName(_fromUtf8("_1dUniPan")) - self.horizontalLayout_100 = QtGui.QHBoxLayout(self._1dUniPan) - self.horizontalLayout_100.setMargin(0) - self.horizontalLayout_100.setObjectName(_fromUtf8("horizontalLayout_100")) - self.label_95 = QtGui.QLabel(self._1dUniPan) - self.label_95.setObjectName(_fromUtf8("label_95")) + self._1dUniPan.setObjectName("_1dUniPan") + self.horizontalLayout_100 = QtWidgets.QHBoxLayout(self._1dUniPan) + self.horizontalLayout_100.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout_100.setObjectName("horizontalLayout_100") + self.label_95 = QtWidgets.QLabel(self._1dUniPan) + self.label_95.setObjectName("label_95") self.horizontalLayout_100.addWidget(self.label_95) - self._1dUniColor = QtGui.QLineEdit(self._1dUniPan) - self._1dUniColor.setObjectName(_fromUtf8("_1dUniColor")) + self._1dUniColor = QtWidgets.QLineEdit(self._1dUniPan) + self._1dUniColor.setObjectName("_1dUniColor") self.horizontalLayout_100.addWidget(self._1dUniColor) self.verticalLayout_60.addWidget(self._1dUniPan) - self._1dDynText = QtGui.QLabel(self._1dColBox) - self._1dDynText.setObjectName(_fromUtf8("_1dDynText")) + self._1dDynText = QtWidgets.QLabel(self._1dColBox) + self._1dDynText.setObjectName("_1dDynText") self.verticalLayout_60.addWidget(self._1dDynText) self.verticalLayout_59.addWidget(self._1dColBox) - self.horizontalLayout_118 = QtGui.QHBoxLayout() + self.horizontalLayout_118 = QtWidgets.QHBoxLayout() self.horizontalLayout_118.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_118.setSpacing(0) - self.horizontalLayout_118.setObjectName(_fromUtf8("horizontalLayout_118")) - spacerItem42 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_118.setObjectName("horizontalLayout_118") + spacerItem42 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_118.addItem(spacerItem42) - self.line_23 = QtGui.QFrame(self.scrollAreaWidgetContents_9) + self.line_23 = QtWidgets.QFrame(self.scrollAreaWidgetContents_9) self.line_23.setMinimumSize(QtCore.QSize(200, 0)) self.line_23.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_23.setFrameShape(QtGui.QFrame.HLine) - self.line_23.setFrameShadow(QtGui.QFrame.Sunken) - self.line_23.setObjectName(_fromUtf8("line_23")) + self.line_23.setFrameShape(QtWidgets.QFrame.HLine) + self.line_23.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_23.setObjectName("line_23") self.horizontalLayout_118.addWidget(self.line_23) - spacerItem43 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem43 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_118.addItem(spacerItem43) self.verticalLayout_59.addLayout(self.horizontalLayout_118) - self.groupBox_34 = QtGui.QGroupBox(self.scrollAreaWidgetContents_9) - self.groupBox_34.setObjectName(_fromUtf8("groupBox_34")) - self.horizontalLayout_120 = QtGui.QHBoxLayout(self.groupBox_34) - self.horizontalLayout_120.setObjectName(_fromUtf8("horizontalLayout_120")) - self.label_118 = QtGui.QLabel(self.groupBox_34) - self.label_118.setObjectName(_fromUtf8("label_118")) + self.groupBox_34 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_9) + self.groupBox_34.setObjectName("groupBox_34") + self.horizontalLayout_120 = QtWidgets.QHBoxLayout(self.groupBox_34) + self.horizontalLayout_120.setObjectName("horizontalLayout_120") + self.label_118 = QtWidgets.QLabel(self.groupBox_34) + self.label_118.setObjectName("label_118") self.horizontalLayout_120.addWidget(self.label_118) - self._1dInterType = QtGui.QComboBox(self.groupBox_34) - self._1dInterType.setObjectName(_fromUtf8("_1dInterType")) - self._1dInterType.addItem(_fromUtf8("")) - self._1dInterType.addItem(_fromUtf8("")) - self._1dInterType.addItem(_fromUtf8("")) - self._1dInterType.addItem(_fromUtf8("")) - self._1dInterType.addItem(_fromUtf8("")) - self._1dInterType.addItem(_fromUtf8("")) - self._1dInterType.addItem(_fromUtf8("")) + self._1dInterType = QtWidgets.QComboBox(self.groupBox_34) + self._1dInterType.setObjectName("_1dInterType") + self._1dInterType.addItem("") + self._1dInterType.addItem("") + self._1dInterType.addItem("") + self._1dInterType.addItem("") + self._1dInterType.addItem("") + self._1dInterType.addItem("") + self._1dInterType.addItem("") self.horizontalLayout_120.addWidget(self._1dInterType) - spacerItem44 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem44 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_120.addItem(spacerItem44) - self.label_119 = QtGui.QLabel(self.groupBox_34) - self.label_119.setObjectName(_fromUtf8("label_119")) + self.label_119 = QtWidgets.QLabel(self.groupBox_34) + self.label_119.setObjectName("label_119") self.horizontalLayout_120.addWidget(self.label_119) - self._1dInterStep = QtGui.QDoubleSpinBox(self.groupBox_34) + self._1dInterStep = QtWidgets.QDoubleSpinBox(self.groupBox_34) self._1dInterStep.setMinimum(0.01) self._1dInterStep.setMaximum(0.99) self._1dInterStep.setSingleStep(0.1) self._1dInterStep.setProperty("value", 0.99) - self._1dInterStep.setObjectName(_fromUtf8("_1dInterStep")) + self._1dInterStep.setObjectName("_1dInterStep") self.horizontalLayout_120.addWidget(self._1dInterStep) - spacerItem45 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem45 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_120.addItem(spacerItem45) self.verticalLayout_59.addWidget(self.groupBox_34) - self.horizontalLayout_121 = QtGui.QHBoxLayout() + self.horizontalLayout_121 = QtWidgets.QHBoxLayout() self.horizontalLayout_121.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_121.setSpacing(0) - self.horizontalLayout_121.setObjectName(_fromUtf8("horizontalLayout_121")) - spacerItem46 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_121.setObjectName("horizontalLayout_121") + spacerItem46 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_121.addItem(spacerItem46) - self.line_24 = QtGui.QFrame(self.scrollAreaWidgetContents_9) + self.line_24 = QtWidgets.QFrame(self.scrollAreaWidgetContents_9) self.line_24.setMinimumSize(QtCore.QSize(200, 0)) self.line_24.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_24.setFrameShape(QtGui.QFrame.HLine) - self.line_24.setFrameShadow(QtGui.QFrame.Sunken) - self.line_24.setObjectName(_fromUtf8("line_24")) + self.line_24.setFrameShape(QtWidgets.QFrame.HLine) + self.line_24.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_24.setObjectName("line_24") self.horizontalLayout_121.addWidget(self.line_24) - spacerItem47 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem47 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_121.addItem(spacerItem47) self.verticalLayout_59.addLayout(self.horizontalLayout_121) - self.groupBox_31 = QtGui.QGroupBox(self.scrollAreaWidgetContents_9) - self.groupBox_31.setObjectName(_fromUtf8("groupBox_31")) - self.verticalLayout_58 = QtGui.QVBoxLayout(self.groupBox_31) - self.verticalLayout_58.setObjectName(_fromUtf8("verticalLayout_58")) - self.gridLayout_10 = QtGui.QGridLayout() + self.groupBox_31 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_9) + self.groupBox_31.setObjectName("groupBox_31") + self.verticalLayout_58 = QtWidgets.QVBoxLayout(self.groupBox_31) + self.verticalLayout_58.setObjectName("verticalLayout_58") + self.gridLayout_10 = QtWidgets.QGridLayout() self.gridLayout_10.setContentsMargins(-1, 0, -1, -1) - self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10")) - self.label_90 = QtGui.QLabel(self.groupBox_31) - self.label_90.setObjectName(_fromUtf8("label_90")) + self.gridLayout_10.setObjectName("gridLayout_10") + self.label_90 = QtWidgets.QLabel(self.groupBox_31) + self.label_90.setObjectName("label_90") self.gridLayout_10.addWidget(self.label_90, 3, 0, 1, 1) - self.label_88 = QtGui.QLabel(self.groupBox_31) - self.label_88.setObjectName(_fromUtf8("label_88")) + self.label_88 = QtWidgets.QLabel(self.groupBox_31) + self.label_88.setObjectName("label_88") self.gridLayout_10.addWidget(self.label_88, 1, 0, 1, 1) - self.label_89 = QtGui.QLabel(self.groupBox_31) - self.label_89.setObjectName(_fromUtf8("label_89")) + self.label_89 = QtWidgets.QLabel(self.groupBox_31) + self.label_89.setObjectName("label_89") self.gridLayout_10.addWidget(self.label_89, 2, 0, 1, 1) - self._1dYlabEdit = QtGui.QLineEdit(self.groupBox_31) - self._1dYlabEdit.setObjectName(_fromUtf8("_1dYlabEdit")) + self._1dYlabEdit = QtWidgets.QLineEdit(self.groupBox_31) + self._1dYlabEdit.setObjectName("_1dYlabEdit") self.gridLayout_10.addWidget(self._1dYlabEdit, 3, 1, 1, 1) - self._1dTitleEdit = QtGui.QLineEdit(self.groupBox_31) - self._1dTitleEdit.setObjectName(_fromUtf8("_1dTitleEdit")) + self._1dTitleEdit = QtWidgets.QLineEdit(self.groupBox_31) + self._1dTitleEdit.setObjectName("_1dTitleEdit") self.gridLayout_10.addWidget(self._1dTitleEdit, 1, 1, 1, 1) - self._1dXlabEdit = QtGui.QLineEdit(self.groupBox_31) - self._1dXlabEdit.setObjectName(_fromUtf8("_1dXlabEdit")) + self._1dXlabEdit = QtWidgets.QLineEdit(self.groupBox_31) + self._1dXlabEdit.setObjectName("_1dXlabEdit") self.gridLayout_10.addWidget(self._1dXlabEdit, 2, 1, 1, 1) - self._1dGridTog = QtGui.QCheckBox(self.groupBox_31) - self._1dGridTog.setObjectName(_fromUtf8("_1dGridTog")) + self._1dGridTog = QtWidgets.QCheckBox(self.groupBox_31) + self._1dGridTog.setObjectName("_1dGridTog") self.gridLayout_10.addWidget(self._1dGridTog, 0, 0, 1, 1) self.verticalLayout_58.addLayout(self.gridLayout_10) self.verticalLayout_59.addWidget(self.groupBox_31) - spacerItem48 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem48 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_59.addItem(spacerItem48) self.scrollArea_8.setWidget(self.scrollAreaWidgetContents_9) self.verticalLayout_69.addWidget(self.scrollArea_8) - self._1dPltTab.addTab(self._1dSigTab, _fromUtf8("")) - self._2dSigTab = QtGui.QWidget() - self._2dSigTab.setObjectName(_fromUtf8("_2dSigTab")) - self.verticalLayout_70 = QtGui.QVBoxLayout(self._2dSigTab) - self.verticalLayout_70.setObjectName(_fromUtf8("verticalLayout_70")) - self.scrollArea_7 = QtGui.QScrollArea(self._2dSigTab) + self._1dPltTab.addTab(self._1dSigTab, "") + self._2dSigTab = QtWidgets.QWidget() + self._2dSigTab.setObjectName("_2dSigTab") + self.verticalLayout_70 = QtWidgets.QVBoxLayout(self._2dSigTab) + self.verticalLayout_70.setObjectName("verticalLayout_70") + self.scrollArea_7 = QtWidgets.QScrollArea(self._2dSigTab) self.scrollArea_7.setWidgetResizable(True) - self.scrollArea_7.setObjectName(_fromUtf8("scrollArea_7")) - self.scrollAreaWidgetContents_8 = QtGui.QWidget() + self.scrollArea_7.setObjectName("scrollArea_7") + self.scrollAreaWidgetContents_8 = QtWidgets.QWidget() self.scrollAreaWidgetContents_8.setGeometry(QtCore.QRect(0, 0, 304, 255)) - self.scrollAreaWidgetContents_8.setObjectName(_fromUtf8("scrollAreaWidgetContents_8")) - self.verticalLayout_68 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_8) - self.verticalLayout_68.setObjectName(_fromUtf8("verticalLayout_68")) - self.groupBox_39 = QtGui.QGroupBox(self.scrollAreaWidgetContents_8) - self.groupBox_39.setObjectName(_fromUtf8("groupBox_39")) - self.verticalLayout_67 = QtGui.QVBoxLayout(self.groupBox_39) - self.verticalLayout_67.setObjectName(_fromUtf8("verticalLayout_67")) - self._ImShapePan = QtGui.QFrame(self.groupBox_39) - self._ImShapePan.setFrameShape(QtGui.QFrame.StyledPanel) - self._ImShapePan.setFrameShadow(QtGui.QFrame.Raised) - self._ImShapePan.setObjectName(_fromUtf8("_ImShapePan")) - self.horizontalLayout_102 = QtGui.QHBoxLayout(self._ImShapePan) - self.horizontalLayout_102.setObjectName(_fromUtf8("horizontalLayout_102")) - spacerItem49 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.scrollAreaWidgetContents_8.setObjectName("scrollAreaWidgetContents_8") + self.verticalLayout_68 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_8) + self.verticalLayout_68.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_68.setObjectName("verticalLayout_68") + self.groupBox_39 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents_8) + self.groupBox_39.setObjectName("groupBox_39") + self.verticalLayout_67 = QtWidgets.QVBoxLayout(self.groupBox_39) + self.verticalLayout_67.setObjectName("verticalLayout_67") + self._ImShapePan = QtWidgets.QFrame(self.groupBox_39) + self._ImShapePan.setFrameShape(QtWidgets.QFrame.StyledPanel) + self._ImShapePan.setFrameShadow(QtWidgets.QFrame.Raised) + self._ImShapePan.setObjectName("_ImShapePan") + self.horizontalLayout_102 = QtWidgets.QHBoxLayout(self._ImShapePan) + self.horizontalLayout_102.setObjectName("horizontalLayout_102") + spacerItem49 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_102.addItem(spacerItem49) - self._imAxShape = QtGui.QLabel(self._ImShapePan) - self._imAxShape.setObjectName(_fromUtf8("_imAxShape")) + self._imAxShape = QtWidgets.QLabel(self._ImShapePan) + self._imAxShape.setObjectName("_imAxShape") self.horizontalLayout_102.addWidget(self._imAxShape) - spacerItem50 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem50 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_102.addItem(spacerItem50) self.verticalLayout_67.addWidget(self._ImShapePan) - self.gridLayout_15 = QtGui.QGridLayout() + self.gridLayout_15 = QtWidgets.QGridLayout() self.gridLayout_15.setContentsMargins(-1, 20, -1, -1) - self.gridLayout_15.setObjectName(_fromUtf8("gridLayout_15")) - spacerItem51 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_15.setObjectName("gridLayout_15") + spacerItem51 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_15.addItem(spacerItem51, 1, 5, 1, 1) - self._imAxZ = QtGui.QComboBox(self.groupBox_39) - self._imAxZ.setObjectName(_fromUtf8("_imAxZ")) + self._imAxZ = QtWidgets.QComboBox(self.groupBox_39) + self._imAxZ.setObjectName("_imAxZ") self.gridLayout_15.addWidget(self._imAxZ, 2, 1, 1, 1) - self.label_126 = QtGui.QLabel(self.groupBox_39) - self.label_126.setObjectName(_fromUtf8("label_126")) + self.label_126 = QtWidgets.QLabel(self.groupBox_39) + self.label_126.setObjectName("label_126") self.gridLayout_15.addWidget(self.label_126, 1, 0, 1, 1) - self.label_127 = QtGui.QLabel(self.groupBox_39) - self.label_127.setObjectName(_fromUtf8("label_127")) + self.label_127 = QtWidgets.QLabel(self.groupBox_39) + self.label_127.setObjectName("label_127") self.gridLayout_15.addWidget(self.label_127, 0, 0, 1, 1) - self.label_128 = QtGui.QLabel(self.groupBox_39) - self.label_128.setObjectName(_fromUtf8("label_128")) + self.label_128 = QtWidgets.QLabel(self.groupBox_39) + self.label_128.setObjectName("label_128") self.gridLayout_15.addWidget(self.label_128, 1, 3, 1, 1) - self._imAxInd = QtGui.QSpinBox(self.groupBox_39) - self._imAxInd.setObjectName(_fromUtf8("_imAxInd")) + self._imAxInd = QtWidgets.QSpinBox(self.groupBox_39) + self._imAxInd.setObjectName("_imAxInd") self.gridLayout_15.addWidget(self._imAxInd, 1, 4, 1, 1) - spacerItem52 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem52 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_15.addItem(spacerItem52, 1, 2, 1, 1) - self._imAxY = QtGui.QComboBox(self.groupBox_39) - self._imAxY.setObjectName(_fromUtf8("_imAxY")) + self._imAxY = QtWidgets.QComboBox(self.groupBox_39) + self._imAxY.setObjectName("_imAxY") self.gridLayout_15.addWidget(self._imAxY, 1, 1, 1, 1) - self._imAxZTxt = QtGui.QLabel(self.groupBox_39) - self._imAxZTxt.setObjectName(_fromUtf8("_imAxZTxt")) + self._imAxZTxt = QtWidgets.QLabel(self.groupBox_39) + self._imAxZTxt.setObjectName("_imAxZTxt") self.gridLayout_15.addWidget(self._imAxZTxt, 2, 0, 1, 1) - self._imAxX = QtGui.QComboBox(self.groupBox_39) - self._imAxX.setObjectName(_fromUtf8("_imAxX")) + self._imAxX = QtWidgets.QComboBox(self.groupBox_39) + self._imAxX.setObjectName("_imAxX") self.gridLayout_15.addWidget(self._imAxX, 0, 1, 1, 1) - self.label_129 = QtGui.QLabel(self.groupBox_39) - self.label_129.setObjectName(_fromUtf8("label_129")) + self.label_129 = QtWidgets.QLabel(self.groupBox_39) + self.label_129.setObjectName("label_129") self.gridLayout_15.addWidget(self.label_129, 0, 3, 1, 1) - self._imAxIndTxt = QtGui.QLabel(self.groupBox_39) - self._imAxIndTxt.setObjectName(_fromUtf8("_imAxIndTxt")) + self._imAxIndTxt = QtWidgets.QLabel(self.groupBox_39) + self._imAxIndTxt.setObjectName("_imAxIndTxt") self.gridLayout_15.addWidget(self._imAxIndTxt, 0, 4, 1, 1) self.verticalLayout_67.addLayout(self.gridLayout_15) - self._imAxCheckTxt = QtGui.QLabel(self.groupBox_39) - self._imAxCheckTxt.setObjectName(_fromUtf8("_imAxCheckTxt")) + self._imAxCheckTxt = QtWidgets.QLabel(self.groupBox_39) + self._imAxCheckTxt.setObjectName("_imAxCheckTxt") self.verticalLayout_67.addWidget(self._imAxCheckTxt) - spacerItem53 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + spacerItem53 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_67.addItem(spacerItem53) self.verticalLayout_68.addWidget(self.groupBox_39) self.scrollArea_7.setWidget(self.scrollAreaWidgetContents_8) self.verticalLayout_70.addWidget(self.scrollArea_7) - self._1dPltTab.addTab(self._2dSigTab, _fromUtf8("")) + self._1dPltTab.addTab(self._2dSigTab, "") self.verticalLayout_3.addWidget(self._1dPltTab) - self.QuickSettings.addTab(self.q_1dPlt, _fromUtf8("")) - self.q_Cmap = QtGui.QWidget() - self.q_Cmap.setObjectName(_fromUtf8("q_Cmap")) - self.verticalLayout_23 = QtGui.QVBoxLayout(self.q_Cmap) - self.verticalLayout_23.setObjectName(_fromUtf8("verticalLayout_23")) - self.scrollArea_3 = QtGui.QScrollArea(self.q_Cmap) + self.QuickSettings.addTab(self.q_1dPlt, "") + self.q_Cmap = QtWidgets.QWidget() + self.q_Cmap.setObjectName("q_Cmap") + self.verticalLayout_23 = QtWidgets.QVBoxLayout(self.q_Cmap) + self.verticalLayout_23.setObjectName("verticalLayout_23") + self.scrollArea_3 = QtWidgets.QScrollArea(self.q_Cmap) self.scrollArea_3.setWidgetResizable(True) - self.scrollArea_3.setObjectName(_fromUtf8("scrollArea_3")) - self.scrollAreaWidgetContents_4 = QtGui.QWidget() + self.scrollArea_3.setObjectName("scrollArea_3") + self.scrollAreaWidgetContents_4 = QtWidgets.QWidget() self.scrollAreaWidgetContents_4.setGeometry(QtCore.QRect(0, 0, 376, 251)) - self.scrollAreaWidgetContents_4.setObjectName(_fromUtf8("scrollAreaWidgetContents_4")) - self.verticalLayout_28 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents_4) - self.verticalLayout_28.setObjectName(_fromUtf8("verticalLayout_28")) - self.horizontalLayout_119 = QtGui.QHBoxLayout() + self.scrollAreaWidgetContents_4.setObjectName("scrollAreaWidgetContents_4") + self.verticalLayout_28 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_4) + self.verticalLayout_28.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_28.setObjectName("verticalLayout_28") + self.horizontalLayout_119 = QtWidgets.QHBoxLayout() self.horizontalLayout_119.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_119.setObjectName(_fromUtf8("horizontalLayout_119")) - spacerItem54 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_119.setObjectName("horizontalLayout_119") + spacerItem54 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_119.addItem(spacerItem54) - self.label_125 = QtGui.QLabel(self.scrollAreaWidgetContents_4) - self.label_125.setObjectName(_fromUtf8("label_125")) + self.label_125 = QtWidgets.QLabel(self.scrollAreaWidgetContents_4) + self.label_125.setObjectName("label_125") self.horizontalLayout_119.addWidget(self.label_125) - self._cbObjects = QtGui.QComboBox(self.scrollAreaWidgetContents_4) - self._cbObjects.setObjectName(_fromUtf8("_cbObjects")) - self._cbObjects.addItem(_fromUtf8("")) - self._cbObjects.addItem(_fromUtf8("")) - self._cbObjects.addItem(_fromUtf8("")) - self._cbObjects.addItem(_fromUtf8("")) - self._cbObjects.addItem(_fromUtf8("")) + self._cbObjects = QtWidgets.QComboBox(self.scrollAreaWidgetContents_4) + self._cbObjects.setObjectName("_cbObjects") + self._cbObjects.addItem("") + self._cbObjects.addItem("") + self._cbObjects.addItem("") + self._cbObjects.addItem("") + self._cbObjects.addItem("") self.horizontalLayout_119.addWidget(self._cbObjects) - spacerItem55 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem55 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_119.addItem(spacerItem55) self.verticalLayout_28.addLayout(self.horizontalLayout_119) - self.horizontalLayout_18 = QtGui.QHBoxLayout() + self.horizontalLayout_18 = QtWidgets.QHBoxLayout() self.horizontalLayout_18.setContentsMargins(-1, -1, -1, 0) - self.horizontalLayout_18.setObjectName(_fromUtf8("horizontalLayout_18")) - self.label_10 = QtGui.QLabel(self.scrollAreaWidgetContents_4) - self.label_10.setObjectName(_fromUtf8("label_10")) + self.horizontalLayout_18.setObjectName("horizontalLayout_18") + self.label_10 = QtWidgets.QLabel(self.scrollAreaWidgetContents_4) + self.label_10.setObjectName("label_10") self.horizontalLayout_18.addWidget(self.label_10) - self._cbCmap = QtGui.QComboBox(self.scrollAreaWidgetContents_4) + self._cbCmap = QtWidgets.QComboBox(self.scrollAreaWidgetContents_4) self._cbCmap.setEditable(False) - self._cbCmap.setObjectName(_fromUtf8("_cbCmap")) + self._cbCmap.setObjectName("_cbCmap") self.horizontalLayout_18.addWidget(self._cbCmap) - self._cbInvert = QtGui.QCheckBox(self.scrollAreaWidgetContents_4) - self._cbInvert.setObjectName(_fromUtf8("_cbInvert")) + self._cbInvert = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_4) + self._cbInvert.setObjectName("_cbInvert") self.horizontalLayout_18.addWidget(self._cbInvert) - self._cbAutoScale = QtGui.QPushButton(self.scrollAreaWidgetContents_4) - self._cbAutoScale.setObjectName(_fromUtf8("_cbAutoScale")) + self._cbAutoScale = QtWidgets.QPushButton(self.scrollAreaWidgetContents_4) + self._cbAutoScale.setObjectName("_cbAutoScale") self.horizontalLayout_18.addWidget(self._cbAutoScale) - spacerItem56 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem56 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_18.addItem(spacerItem56) self.verticalLayout_28.addLayout(self.horizontalLayout_18) - self.horizontalLayout_48 = QtGui.QHBoxLayout() + self.horizontalLayout_48 = QtWidgets.QHBoxLayout() self.horizontalLayout_48.setContentsMargins(-1, -1, -1, 5) - self.horizontalLayout_48.setObjectName(_fromUtf8("horizontalLayout_48")) - self.label_18 = QtGui.QLabel(self.scrollAreaWidgetContents_4) - self.label_18.setObjectName(_fromUtf8("label_18")) + self.horizontalLayout_48.setObjectName("horizontalLayout_48") + self.label_18 = QtWidgets.QLabel(self.scrollAreaWidgetContents_4) + self.label_18.setObjectName("label_18") self.horizontalLayout_48.addWidget(self.label_18) - spacerItem57 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem57 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_48.addItem(spacerItem57) - self._cbClimMin = QtGui.QDoubleSpinBox(self.scrollAreaWidgetContents_4) + self._cbClimMin = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_4) self._cbClimMin.setMinimum(-16777215.0) self._cbClimMin.setMaximum(16777215.0) self._cbClimMin.setSingleStep(1.0) - self._cbClimMin.setObjectName(_fromUtf8("_cbClimMin")) + self._cbClimMin.setObjectName("_cbClimMin") self.horizontalLayout_48.addWidget(self._cbClimMin) - spacerItem58 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem58 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_48.addItem(spacerItem58) - self._cbClimMax = QtGui.QDoubleSpinBox(self.scrollAreaWidgetContents_4) + self._cbClimMax = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_4) self._cbClimMax.setMinimum(-16777215.0) self._cbClimMax.setMaximum(16777215.0) - self._cbClimMax.setObjectName(_fromUtf8("_cbClimMax")) + self._cbClimMax.setObjectName("_cbClimMax") self.horizontalLayout_48.addWidget(self._cbClimMax) - spacerItem59 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem59 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_48.addItem(spacerItem59) self.verticalLayout_28.addLayout(self.horizontalLayout_48) - self.horizontalLayout_20 = QtGui.QHBoxLayout() + self.horizontalLayout_20 = QtWidgets.QHBoxLayout() self.horizontalLayout_20.setContentsMargins(-1, -1, -1, 5) - self.horizontalLayout_20.setObjectName(_fromUtf8("horizontalLayout_20")) - self._cbVminChk = QtGui.QCheckBox(self.scrollAreaWidgetContents_4) - self._cbVminChk.setObjectName(_fromUtf8("_cbVminChk")) + self.horizontalLayout_20.setObjectName("horizontalLayout_20") + self._cbVminChk = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_4) + self._cbVminChk.setObjectName("_cbVminChk") self.horizontalLayout_20.addWidget(self._cbVminChk) - self._cbVmin = QtGui.QDoubleSpinBox(self.scrollAreaWidgetContents_4) + self._cbVmin = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_4) self._cbVmin.setMinimum(-16777215.0) self._cbVmin.setMaximum(16777215.0) self._cbVmin.setSingleStep(1.0) - self._cbVmin.setObjectName(_fromUtf8("_cbVmin")) + self._cbVmin.setObjectName("_cbVmin") self.horizontalLayout_20.addWidget(self._cbVmin) - spacerItem60 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem60 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_20.addItem(spacerItem60) - self._cbVmaxChk = QtGui.QCheckBox(self.scrollAreaWidgetContents_4) - self._cbVmaxChk.setObjectName(_fromUtf8("_cbVmaxChk")) + self._cbVmaxChk = QtWidgets.QCheckBox(self.scrollAreaWidgetContents_4) + self._cbVmaxChk.setObjectName("_cbVmaxChk") self.horizontalLayout_20.addWidget(self._cbVmaxChk) - self._cbVmax = QtGui.QDoubleSpinBox(self.scrollAreaWidgetContents_4) + self._cbVmax = QtWidgets.QDoubleSpinBox(self.scrollAreaWidgetContents_4) self._cbVmax.setMinimum(-16777215.0) self._cbVmax.setMaximum(16777215.0) - self._cbVmax.setObjectName(_fromUtf8("_cbVmax")) + self._cbVmax.setObjectName("_cbVmax") self.horizontalLayout_20.addWidget(self._cbVmax) - spacerItem61 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem61 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_20.addItem(spacerItem61) self.verticalLayout_28.addLayout(self.horizontalLayout_20) - self.horizontalLayout_21 = QtGui.QHBoxLayout() - self.horizontalLayout_21.setObjectName(_fromUtf8("horizontalLayout_21")) - self.qUnder_txt = QtGui.QLabel(self.scrollAreaWidgetContents_4) - self.qUnder_txt.setObjectName(_fromUtf8("qUnder_txt")) + self.horizontalLayout_21 = QtWidgets.QHBoxLayout() + self.horizontalLayout_21.setObjectName("horizontalLayout_21") + self.qUnder_txt = QtWidgets.QLabel(self.scrollAreaWidgetContents_4) + self.qUnder_txt.setObjectName("qUnder_txt") self.horizontalLayout_21.addWidget(self.qUnder_txt) - self._cbUnder = QtGui.QLineEdit(self.scrollAreaWidgetContents_4) - self._cbUnder.setObjectName(_fromUtf8("_cbUnder")) + self._cbUnder = QtWidgets.QLineEdit(self.scrollAreaWidgetContents_4) + self._cbUnder.setObjectName("_cbUnder") self.horizontalLayout_21.addWidget(self._cbUnder) - self.qOver_txt = QtGui.QLabel(self.scrollAreaWidgetContents_4) - self.qOver_txt.setObjectName(_fromUtf8("qOver_txt")) + self.qOver_txt = QtWidgets.QLabel(self.scrollAreaWidgetContents_4) + self.qOver_txt.setObjectName("qOver_txt") self.horizontalLayout_21.addWidget(self.qOver_txt) - self._cbOver = QtGui.QLineEdit(self.scrollAreaWidgetContents_4) - self._cbOver.setObjectName(_fromUtf8("_cbOver")) + self._cbOver = QtWidgets.QLineEdit(self.scrollAreaWidgetContents_4) + self._cbOver.setObjectName("_cbOver") self.horizontalLayout_21.addWidget(self._cbOver) self.verticalLayout_28.addLayout(self.horizontalLayout_21) - self.horizontalLayout_25 = QtGui.QHBoxLayout() + self.horizontalLayout_25 = QtWidgets.QHBoxLayout() self.horizontalLayout_25.setSpacing(0) - self.horizontalLayout_25.setObjectName(_fromUtf8("horizontalLayout_25")) - self.label_11 = QtGui.QLabel(self.scrollAreaWidgetContents_4) - self.label_11.setObjectName(_fromUtf8("label_11")) + self.horizontalLayout_25.setObjectName("horizontalLayout_25") + self.label_11 = QtWidgets.QLabel(self.scrollAreaWidgetContents_4) + self.label_11.setObjectName("label_11") self.horizontalLayout_25.addWidget(self.label_11) - self._cbLabel = QtGui.QLineEdit(self.scrollAreaWidgetContents_4) - self._cbLabel.setObjectName(_fromUtf8("_cbLabel")) + self._cbLabel = QtWidgets.QLineEdit(self.scrollAreaWidgetContents_4) + self._cbLabel.setObjectName("_cbLabel") self.horizontalLayout_25.addWidget(self._cbLabel) self.verticalLayout_28.addLayout(self.horizontalLayout_25) - self.horizontalLayout_63 = QtGui.QHBoxLayout() + self.horizontalLayout_63 = QtWidgets.QHBoxLayout() self.horizontalLayout_63.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout_63.setSpacing(0) - self.horizontalLayout_63.setObjectName(_fromUtf8("horizontalLayout_63")) - spacerItem62 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout_63.setObjectName("horizontalLayout_63") + spacerItem62 = QtWidgets.QSpacerItem(0, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_63.addItem(spacerItem62) - self.line_10 = QtGui.QFrame(self.scrollAreaWidgetContents_4) + self.line_10 = QtWidgets.QFrame(self.scrollAreaWidgetContents_4) self.line_10.setMinimumSize(QtCore.QSize(200, 0)) self.line_10.setMaximumSize(QtCore.QSize(200, 16777215)) - self.line_10.setFrameShape(QtGui.QFrame.HLine) - self.line_10.setFrameShadow(QtGui.QFrame.Sunken) - self.line_10.setObjectName(_fromUtf8("line_10")) + self.line_10.setFrameShape(QtWidgets.QFrame.HLine) + self.line_10.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_10.setObjectName("line_10") self.horizontalLayout_63.addWidget(self.line_10) - spacerItem63 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem63 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_63.addItem(spacerItem63) self.verticalLayout_28.addLayout(self.horizontalLayout_63) - self.cbpanel = QtGui.QVBoxLayout() + self.cbpanel = QtWidgets.QVBoxLayout() self.cbpanel.setContentsMargins(-1, 0, -1, 0) self.cbpanel.setSpacing(0) - self.cbpanel.setObjectName(_fromUtf8("cbpanel")) - spacerItem64 = QtGui.QSpacerItem(100, 200, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.cbpanel.setObjectName("cbpanel") + spacerItem64 = QtWidgets.QSpacerItem(100, 200, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.cbpanel.addItem(spacerItem64) self.verticalLayout_28.addLayout(self.cbpanel) self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_4) self.verticalLayout_23.addWidget(self.scrollArea_3) - self.colorbar_pan = QtGui.QWidget(self.q_Cmap) + self.colorbar_pan = QtWidgets.QWidget(self.q_Cmap) self.colorbar_pan.setMinimumSize(QtCore.QSize(0, 0)) - self.colorbar_pan.setObjectName(_fromUtf8("colorbar_pan")) - self.verticalLayout_46 = QtGui.QVBoxLayout(self.colorbar_pan) - self.verticalLayout_46.setObjectName(_fromUtf8("verticalLayout_46")) + self.colorbar_pan.setObjectName("colorbar_pan") + self.verticalLayout_46 = QtWidgets.QVBoxLayout(self.colorbar_pan) + self.verticalLayout_46.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_46.setObjectName("verticalLayout_46") self.verticalLayout_23.addWidget(self.colorbar_pan) - self.QuickSettings.addTab(self.q_Cmap, _fromUtf8("")) + self.QuickSettings.addTab(self.q_Cmap, "") self.verticalLayout_4.addWidget(self.QuickSettings) self.horizontalLayout_2.addWidget(self.q_widget) - self.verticalLayout_18 = QtGui.QVBoxLayout() + self.verticalLayout_18 = QtWidgets.QVBoxLayout() self.verticalLayout_18.setContentsMargins(-1, 0, 0, -1) self.verticalLayout_18.setSpacing(0) - self.verticalLayout_18.setObjectName(_fromUtf8("verticalLayout_18")) - self.MODIFY = QtGui.QHBoxLayout() - self.MODIFY.setMargin(0) + self.verticalLayout_18.setObjectName("verticalLayout_18") + self.MODIFY = QtWidgets.QHBoxLayout() + self.MODIFY.setContentsMargins(0, 0, 0, 0) self.MODIFY.setSpacing(0) - self.MODIFY.setObjectName(_fromUtf8("MODIFY")) - spacerItem65 = QtGui.QSpacerItem(0, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.MODIFY.setObjectName("MODIFY") + spacerItem65 = QtWidgets.QSpacerItem(0, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.MODIFY.addItem(spacerItem65) - self._NdVizPanel = QtGui.QWidget(self.centralwidget) - self._NdVizPanel.setObjectName(_fromUtf8("_NdVizPanel")) - self.verticalLayout_17 = QtGui.QVBoxLayout(self._NdVizPanel) - self.verticalLayout_17.setMargin(0) + self._NdVizPanel = QtWidgets.QWidget(self.centralwidget) + self._NdVizPanel.setObjectName("_NdVizPanel") + self.verticalLayout_17 = QtWidgets.QVBoxLayout(self._NdVizPanel) + self.verticalLayout_17.setContentsMargins(0, 0, 0, 0) self.verticalLayout_17.setSpacing(0) - self.verticalLayout_17.setObjectName(_fromUtf8("verticalLayout_17")) - self._NdVizLayout = QtGui.QHBoxLayout() + self.verticalLayout_17.setObjectName("verticalLayout_17") + self._NdVizLayout = QtWidgets.QHBoxLayout() self._NdVizLayout.setContentsMargins(-1, -1, 0, -1) self._NdVizLayout.setSpacing(0) - self._NdVizLayout.setObjectName(_fromUtf8("_NdVizLayout")) + self._NdVizLayout.setObjectName("_NdVizLayout") self.verticalLayout_17.addLayout(self._NdVizLayout) self.MODIFY.addWidget(self._NdVizPanel) - self._1dVizPanel = QtGui.QWidget(self.centralwidget) - self._1dVizPanel.setObjectName(_fromUtf8("_1dVizPanel")) - self.horizontalLayout_38 = QtGui.QHBoxLayout(self._1dVizPanel) - self.horizontalLayout_38.setMargin(0) + self._1dVizPanel = QtWidgets.QWidget(self.centralwidget) + self._1dVizPanel.setObjectName("_1dVizPanel") + self.horizontalLayout_38 = QtWidgets.QHBoxLayout(self._1dVizPanel) + self.horizontalLayout_38.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_38.setSpacing(0) - self.horizontalLayout_38.setObjectName(_fromUtf8("horizontalLayout_38")) - self._1dVizLayout = QtGui.QHBoxLayout() + self.horizontalLayout_38.setObjectName("horizontalLayout_38") + self._1dVizLayout = QtWidgets.QHBoxLayout() self._1dVizLayout.setContentsMargins(-1, -1, 0, -1) self._1dVizLayout.setSpacing(0) - self._1dVizLayout.setObjectName(_fromUtf8("_1dVizLayout")) + self._1dVizLayout.setObjectName("_1dVizLayout") self.horizontalLayout_38.addLayout(self._1dVizLayout) self.MODIFY.addWidget(self._1dVizPanel) self.verticalLayout_18.addLayout(self.MODIFY) - spacerItem66 = QtGui.QSpacerItem(40, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + spacerItem66 = QtWidgets.QSpacerItem(40, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.verticalLayout_18.addItem(spacerItem66) self.horizontalLayout_2.addLayout(self.verticalLayout_18) MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtGui.QMenuBar(MainWindow) + self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1328, 25)) - self.menubar.setObjectName(_fromUtf8("menubar")) - self.menuFiles = QtGui.QMenu(self.menubar) - self.menuFiles.setObjectName(_fromUtf8("menuFiles")) - self.menuDisplay = QtGui.QMenu(self.menubar) - self.menuDisplay.setObjectName(_fromUtf8("menuDisplay")) - self.menuPanel = QtGui.QMenu(self.menuDisplay) - self.menuPanel.setObjectName(_fromUtf8("menuPanel")) - self.menuSettings = QtGui.QMenu(self.menubar) - self.menuSettings.setObjectName(_fromUtf8("menuSettings")) - self.menuHelp = QtGui.QMenu(self.menubar) - self.menuHelp.setObjectName(_fromUtf8("menuHelp")) + self.menubar.setObjectName("menubar") + self.menuFiles = QtWidgets.QMenu(self.menubar) + self.menuFiles.setObjectName("menuFiles") + self.menuDisplay = QtWidgets.QMenu(self.menubar) + self.menuDisplay.setObjectName("menuDisplay") + self.menuPanel = QtWidgets.QMenu(self.menuDisplay) + self.menuPanel.setObjectName("menuPanel") + self.menuSettings = QtWidgets.QMenu(self.menubar) + self.menuSettings.setObjectName("menuSettings") + self.menuHelp = QtWidgets.QMenu(self.menubar) + self.menuHelp.setObjectName("menuHelp") MainWindow.setMenuBar(self.menubar) - self.statusbar = QtGui.QStatusBar(MainWindow) - self.statusbar.setObjectName(_fromUtf8("statusbar")) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) - self.actionSave = QtGui.QAction(MainWindow) - self.actionSave.setObjectName(_fromUtf8("actionSave")) - self.actionLoad = QtGui.QAction(MainWindow) - self.actionLoad.setObjectName(_fromUtf8("actionLoad")) - self.actionCortical_repartition = QtGui.QAction(MainWindow) - self.actionCortical_repartition.setObjectName(_fromUtf8("actionCortical_repartition")) - self.actionCortical = QtGui.QAction(MainWindow) - self.actionCortical.setObjectName(_fromUtf8("actionCortical")) - self.actionSagittal = QtGui.QAction(MainWindow) - self.actionSagittal.setObjectName(_fromUtf8("actionSagittal")) - self.actionAxial = QtGui.QAction(MainWindow) - self.actionAxial.setObjectName(_fromUtf8("actionAxial")) - self.actionCamera = QtGui.QAction(MainWindow) - self.actionCamera.setObjectName(_fromUtf8("actionCamera")) - self.actionLeft = QtGui.QAction(MainWindow) - self.actionLeft.setObjectName(_fromUtf8("actionLeft")) - self.actionRight = QtGui.QAction(MainWindow) - self.actionRight.setObjectName(_fromUtf8("actionRight")) - self.actionQuick_settings = QtGui.QAction(MainWindow) + self.actionSave = QtWidgets.QAction(MainWindow) + self.actionSave.setObjectName("actionSave") + self.actionLoad = QtWidgets.QAction(MainWindow) + self.actionLoad.setObjectName("actionLoad") + self.actionCortical_repartition = QtWidgets.QAction(MainWindow) + self.actionCortical_repartition.setObjectName("actionCortical_repartition") + self.actionCortical = QtWidgets.QAction(MainWindow) + self.actionCortical.setObjectName("actionCortical") + self.actionSagittal = QtWidgets.QAction(MainWindow) + self.actionSagittal.setObjectName("actionSagittal") + self.actionAxial = QtWidgets.QAction(MainWindow) + self.actionAxial.setObjectName("actionAxial") + self.actionCamera = QtWidgets.QAction(MainWindow) + self.actionCamera.setObjectName("actionCamera") + self.actionLeft = QtWidgets.QAction(MainWindow) + self.actionLeft.setObjectName("actionLeft") + self.actionRight = QtWidgets.QAction(MainWindow) + self.actionRight.setObjectName("actionRight") + self.actionQuick_settings = QtWidgets.QAction(MainWindow) self.actionQuick_settings.setCheckable(True) - self.actionQuick_settings.setObjectName(_fromUtf8("actionQuick_settings")) - self.actionClose = QtGui.QAction(MainWindow) - self.actionClose.setObjectName(_fromUtf8("actionClose")) - self.actionProjection = QtGui.QAction(MainWindow) - self.actionProjection.setObjectName(_fromUtf8("actionProjection")) - self.actionRepartition = QtGui.QAction(MainWindow) - self.actionRepartition.setObjectName(_fromUtf8("actionRepartition")) - self.actionShortcuts = QtGui.QAction(MainWindow) + self.actionQuick_settings.setObjectName("actionQuick_settings") + self.actionClose = QtWidgets.QAction(MainWindow) + self.actionClose.setObjectName("actionClose") + self.actionProjection = QtWidgets.QAction(MainWindow) + self.actionProjection.setObjectName("actionProjection") + self.actionRepartition = QtWidgets.QAction(MainWindow) + self.actionRepartition.setObjectName("actionRepartition") + self.actionShortcuts = QtWidgets.QAction(MainWindow) self.actionShortcuts.setCheckable(True) - self.actionShortcuts.setObjectName(_fromUtf8("actionShortcuts")) - self.actionUi_settings = QtGui.QAction(MainWindow) + self.actionShortcuts.setObjectName("actionShortcuts") + self.actionUi_settings = QtWidgets.QAction(MainWindow) self.actionUi_settings.setCheckable(True) self.actionUi_settings.setChecked(False) - self.actionUi_settings.setObjectName(_fromUtf8("actionUi_settings")) - self.actionNdPlt = QtGui.QAction(MainWindow) + self.actionUi_settings.setObjectName("actionUi_settings") + self.actionNdPlt = QtWidgets.QAction(MainWindow) self.actionNdPlt.setCheckable(True) - self.actionNdPlt.setObjectName(_fromUtf8("actionNdPlt")) - self.actionOnedPlt = QtGui.QAction(MainWindow) + self.actionNdPlt.setObjectName("actionNdPlt") + self.actionOnedPlt = QtWidgets.QAction(MainWindow) self.actionOnedPlt.setCheckable(True) - self.actionOnedPlt.setObjectName(_fromUtf8("actionOnedPlt")) - self.actionImage = QtGui.QAction(MainWindow) + self.actionOnedPlt.setObjectName("actionOnedPlt") + self.actionImage = QtWidgets.QAction(MainWindow) self.actionImage.setCheckable(True) - self.actionImage.setObjectName(_fromUtf8("actionImage")) - self.actionColormap = QtGui.QAction(MainWindow) + self.actionImage.setObjectName("actionImage") + self.actionColormap = QtWidgets.QAction(MainWindow) self.actionColormap.setCheckable(True) - self.actionColormap.setObjectName(_fromUtf8("actionColormap")) - self.actionAbout = QtGui.QAction(MainWindow) - self.actionAbout.setObjectName(_fromUtf8("actionAbout")) - self.actionDocumentation = QtGui.QAction(MainWindow) - self.actionDocumentation.setObjectName(_fromUtf8("actionDocumentation")) + self.actionColormap.setObjectName("actionColormap") + self.actionAbout = QtWidgets.QAction(MainWindow) + self.actionAbout.setObjectName("actionAbout") + self.actionDocumentation = QtWidgets.QAction(MainWindow) + self.actionDocumentation.setObjectName("actionDocumentation") self.menuPanel.addAction(self.actionUi_settings) self.menuPanel.addAction(self.actionNdPlt) self.menuPanel.addAction(self.actionOnedPlt) @@ -1244,158 +1237,159 @@ def setupUi(self, MainWindow): MainWindow.setTabOrder(self._cbOver, self._cbLabel) def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(_translate("MainWindow", "ndviz", None)) - self.QuickSettings.setToolTip(_translate("MainWindow", "


", None)) - self.groupBox_5.setTitle(_translate("MainWindow", "Background color", None)) - self.label_5.setText(_translate("MainWindow", "Red", None)) - self.label_6.setText(_translate("MainWindow", "Green", None)) - self.label_7.setText(_translate("MainWindow", "Blue", None)) - self.groupBox_11.setTitle(_translate("MainWindow", "Canvas", None)) - self._CanVisNd.setText(_translate("MainWindow", "Nd-plot", None)) - self._CanVis1d.setText(_translate("MainWindow", "1d-plot", None)) - self._CanVisIm.setText(_translate("MainWindow", "Image", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_UI), _translate("MainWindow", "Settings", None)) - self.q_Ndplt.setToolTip(_translate("MainWindow", "


", None)) - self.groupBox.setTitle(_translate("MainWindow", "Axis selection", None)) - self._ndAxShape.setText(_translate("MainWindow", "data.shape", None)) - self.label_13.setText(_translate("MainWindow", "Time axis :", None)) - self._ndAx2dSecText.setText(_translate("MainWindow", "2nd axis :", None)) - self.label_15.setText(_translate("MainWindow", "Grid (Rows x Cols):", None)) - self.label_14.setText(_translate("MainWindow", "Row axis", None)) - self.label_19.setText(_translate("MainWindow", "Col axis", None)) - self._ndAxCheckMsg.setText(_translate("MainWindow", "

Check message N_rows x N_cols = selected dim

", None)) - self._ndAxUpdate.setText(_translate("MainWindow", "Update", None)) - self.groupBox_2.setTitle(_translate("MainWindow", "Color", None)) - self.label_coltype.setText(_translate("MainWindow", "Type", None)) - self._ndColType.setItemText(0, _translate("MainWindow", "random", None)) - self._ndColType.setItemText(1, _translate("MainWindow", "uniform", None)) - self._ndColType.setItemText(2, _translate("MainWindow", "dyn_time", None)) - self._ndColType.setItemText(3, _translate("MainWindow", "dyn_minmax", None)) - self.label_3.setText(_translate("MainWindow", "Color range", None)) - self._ndRndNew.setText(_translate("MainWindow", "New random", None)) - self.label_8.setText(_translate("MainWindow", "Color", None)) - self._ndDynText.setText(_translate("MainWindow", "

Control signal color using the colormap tab...

", None)) - self.groupBox_3.setTitle(_translate("MainWindow", "Real time", None)) - self.label_2.setText(_translate("MainWindow", "Laps", None)) - self._ndRtStart.setText(_translate("MainWindow", "Start", None)) - self._ndRtStop.setText(_translate("MainWindow", "Stop", None)) - self._ndRtReset.setText(_translate("MainWindow", "Reset", None)) - self.groupBox_4.setTitle(_translate("MainWindow", "Settings", None)) - self.label_4.setText(_translate("MainWindow", "Space", None)) - self.label_9.setText(_translate("MainWindow", "Line width", None)) - self.label_12.setText(_translate("MainWindow", "Scale (x, y)", None)) - self.groupBox_15.setTitle(_translate("MainWindow", "Info", None)) - self.label_16.setText(_translate("MainWindow", "Title", None)) - self.label_39.setText(_translate("MainWindow", "Y label", None)) - self.label_17.setText(_translate("MainWindow", "X label", None)) - self._ndGridTog.setText(_translate("MainWindow", "Grid", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Ndplt), _translate("MainWindow", "Nd-Plot", None)) - self.groupBox_32.setTitle(_translate("MainWindow", "Axis selection", None)) - self._1dAxShape.setText(_translate("MainWindow", "data.shape", None)) - self.label_97.setText(_translate("MainWindow", "Y axis", None)) - self.label_96.setText(_translate("MainWindow", "X axis", None)) - self.label_98.setText(_translate("MainWindow", "Index", None)) - self._1dAxCheckTxt.setText(_translate("MainWindow", "

All axis must be different...

", None)) - self.groupBox_33.setTitle(_translate("MainWindow", "Plot", None)) - self.label_100.setText(_translate("MainWindow", "nfft", None)) - self.label_102.setText(_translate("MainWindow", "Step", None)) - self.label.setText(_translate("MainWindow", "f start", None)) - self.label_130.setText(_translate("MainWindow", "f end", None)) - self.label_91.setText(_translate("MainWindow", "Plot data as", None)) - self._1dPltPick.setItemText(0, _translate("MainWindow", "line", None)) - self._1dPltPick.setItemText(1, _translate("MainWindow", "histogram", None)) - self._1dPltPick.setItemText(2, _translate("MainWindow", "spectrogram", None)) - self._1dPltPick.setItemText(3, _translate("MainWindow", "marker", None)) - self.label_92.setText(_translate("MainWindow", "Bins", None)) - self.label_99.setText(_translate("MainWindow", "Line width", None)) - self.label_101.setText(_translate("MainWindow", "Method", None)) - self._1dLineMeth.setItemText(0, _translate("MainWindow", "gl", None)) - self._1dLineMeth.setItemText(1, _translate("MainWindow", "agg", None)) - self.label_120.setText(_translate("MainWindow", "Size", None)) - self._1dColBox.setTitle(_translate("MainWindow", "Color", None)) - self.label_93.setText(_translate("MainWindow", "Type", None)) - self._1dColType.setItemText(0, _translate("MainWindow", "random", None)) - self._1dColType.setItemText(1, _translate("MainWindow", "uniform", None)) - self._1dColType.setItemText(2, _translate("MainWindow", "dyn_time", None)) - self._1dColType.setItemText(3, _translate("MainWindow", "dyn_minmax", None)) - self.label_94.setText(_translate("MainWindow", "Color range", None)) - self._1dRndNew.setText(_translate("MainWindow", "New random", None)) - self.label_95.setText(_translate("MainWindow", "Color", None)) - self._1dDynText.setText(_translate("MainWindow", "

Control signal color using the colormap tab...

", None)) - self.groupBox_34.setTitle(_translate("MainWindow", "Interpolation", None)) - self.label_118.setText(_translate("MainWindow", "Type", None)) - self._1dInterType.setItemText(0, _translate("MainWindow", "None", None)) - self._1dInterType.setItemText(1, _translate("MainWindow", "linear", None)) - self._1dInterType.setItemText(2, _translate("MainWindow", "nearest", None)) - self._1dInterType.setItemText(3, _translate("MainWindow", "zero", None)) - self._1dInterType.setItemText(4, _translate("MainWindow", "slinear", None)) - self._1dInterType.setItemText(5, _translate("MainWindow", "quadratic", None)) - self._1dInterType.setItemText(6, _translate("MainWindow", "cubic", None)) - self.label_119.setText(_translate("MainWindow", "Step", None)) - self.groupBox_31.setTitle(_translate("MainWindow", "Info", None)) - self.label_90.setText(_translate("MainWindow", "Y label", None)) - self.label_88.setText(_translate("MainWindow", "Title", None)) - self.label_89.setText(_translate("MainWindow", "X label", None)) - self._1dGridTog.setText(_translate("MainWindow", "Grid", None)) - self._1dPltTab.setTabText(self._1dPltTab.indexOf(self._1dSigTab), _translate("MainWindow", "1d-Signal", None)) - self.groupBox_39.setTitle(_translate("MainWindow", "Axis selection", None)) - self._imAxShape.setText(_translate("MainWindow", "data.shape", None)) - self.label_126.setText(_translate("MainWindow", "Y axis", None)) - self.label_127.setText(_translate("MainWindow", "X axis", None)) - self.label_128.setText(_translate("MainWindow", "Index", None)) - self._imAxZTxt.setText(_translate("MainWindow", "Z axis", None)) - self.label_129.setText(_translate("MainWindow", "Move along", None)) - self._imAxIndTxt.setText(_translate("MainWindow", "Z-Axis", None)) - self._imAxCheckTxt.setText(_translate("MainWindow", "

All axis must be different...

", None)) - self._1dPltTab.setTabText(self._1dPltTab.indexOf(self._2dSigTab), _translate("MainWindow", "2d-Signal", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_1dPlt), _translate("MainWindow", "Inspect", None)) - self.label_125.setText(_translate("MainWindow", "Object", None)) - self._cbObjects.setItemText(0, _translate("MainWindow", "ndplt", None)) - self._cbObjects.setItemText(1, _translate("MainWindow", "line", None)) - self._cbObjects.setItemText(2, _translate("MainWindow", "marker", None)) - self._cbObjects.setItemText(3, _translate("MainWindow", "spectrogram", None)) - self._cbObjects.setItemText(4, _translate("MainWindow", "image", None)) - self.label_10.setText(_translate("MainWindow", "Colormap", None)) - self._cbInvert.setText(_translate("MainWindow", "Invert", None)) - self._cbAutoScale.setText(_translate("MainWindow", "Auto-scale", None)) - self.label_18.setText(_translate("MainWindow", "clim", None)) - self._cbVminChk.setToolTip(_translate("MainWindow", "Every values under vmin will be set to the \"under\" color", None)) - self._cbVminChk.setText(_translate("MainWindow", "vmin", None)) - self._cbVmaxChk.setText(_translate("MainWindow", "vmax", None)) - self.qUnder_txt.setText(_translate("MainWindow", "Under", None)) - self.qOver_txt.setText(_translate("MainWindow", "Over", None)) - self.label_11.setText(_translate("MainWindow", "Colorbar label: ", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Cmap), _translate("MainWindow", "Colormap", None)) - self.menuFiles.setTitle(_translate("MainWindow", "Files", None)) - self.menuDisplay.setTitle(_translate("MainWindow", "Display", None)) - self.menuPanel.setTitle(_translate("MainWindow", "Panel", None)) - self.menuSettings.setTitle(_translate("MainWindow", "Settings", None)) - self.menuHelp.setTitle(_translate("MainWindow", "Help", None)) - self.actionSave.setText(_translate("MainWindow", "Save", None)) - self.actionLoad.setText(_translate("MainWindow", "Load", None)) - self.actionCortical_repartition.setText(_translate("MainWindow", "Cortical repartition", None)) - self.actionCortical.setText(_translate("MainWindow", "Cortical", None)) - self.actionSagittal.setText(_translate("MainWindow", "Sagittal", None)) - self.actionAxial.setText(_translate("MainWindow", "Axial", None)) - self.actionCamera.setText(_translate("MainWindow", "Camera", None)) - self.actionLeft.setText(_translate("MainWindow", "Left", None)) - self.actionRight.setText(_translate("MainWindow", "Right", None)) - self.actionQuick_settings.setText(_translate("MainWindow", "Quick settings", None)) - self.actionQuick_settings.setShortcut(_translate("MainWindow", "Ctrl+D", None)) - self.actionClose.setText(_translate("MainWindow", "Close", None)) - self.actionClose.setShortcut(_translate("MainWindow", "Ctrl+Q", None)) - self.actionProjection.setText(_translate("MainWindow", "Projection", None)) - self.actionProjection.setToolTip(_translate("MainWindow", "

Find all vertices under a distance of t_radius with each source and project s_data to the surface

", None)) - self.actionProjection.setShortcut(_translate("MainWindow", "Ctrl+P", None)) - self.actionRepartition.setText(_translate("MainWindow", "Repartition", None)) - self.actionRepartition.setShortcut(_translate("MainWindow", "Ctrl+R", None)) - self.actionShortcuts.setText(_translate("MainWindow", "Shortcuts", None)) - self.actionShortcuts.setShortcut(_translate("MainWindow", "Ctrl+T", None)) - self.actionUi_settings.setText(_translate("MainWindow", "Ui settings", None)) - self.actionNdPlt.setText(_translate("MainWindow", "Nd-plot", None)) - self.actionOnedPlt.setText(_translate("MainWindow", "1d-plot", None)) - self.actionImage.setText(_translate("MainWindow", "Image", None)) - self.actionColormap.setText(_translate("MainWindow", "Colormap", None)) - self.actionAbout.setText(_translate("MainWindow", "About", None)) - self.actionDocumentation.setText(_translate("MainWindow", "Documentation", None)) + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "ndviz")) + self.QuickSettings.setToolTip(_translate("MainWindow", "


")) + self.groupBox_5.setTitle(_translate("MainWindow", "Background color")) + self.label_5.setText(_translate("MainWindow", "Red")) + self.label_6.setText(_translate("MainWindow", "Green")) + self.label_7.setText(_translate("MainWindow", "Blue")) + self.groupBox_11.setTitle(_translate("MainWindow", "Canvas")) + self._CanVisNd.setText(_translate("MainWindow", "Nd-plot")) + self._CanVis1d.setText(_translate("MainWindow", "1d-plot")) + self._CanVisIm.setText(_translate("MainWindow", "Image")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_UI), _translate("MainWindow", "Settings")) + self.q_Ndplt.setToolTip(_translate("MainWindow", "


")) + self.groupBox.setTitle(_translate("MainWindow", "Axis selection")) + self._ndAxShape.setText(_translate("MainWindow", "data.shape")) + self.label_13.setText(_translate("MainWindow", "Time axis :")) + self._ndAx2dSecText.setText(_translate("MainWindow", "2nd axis :")) + self.label_15.setText(_translate("MainWindow", "Grid (Rows x Cols):")) + self.label_14.setText(_translate("MainWindow", "Row axis")) + self.label_19.setText(_translate("MainWindow", "Col axis")) + self._ndAxCheckMsg.setText(_translate("MainWindow", "

Check message N_rows x N_cols = selected dim

")) + self._ndAxUpdate.setText(_translate("MainWindow", "Update")) + self.groupBox_2.setTitle(_translate("MainWindow", "Color")) + self.label_coltype.setText(_translate("MainWindow", "Type")) + self._ndColType.setItemText(0, _translate("MainWindow", "random")) + self._ndColType.setItemText(1, _translate("MainWindow", "uniform")) + self._ndColType.setItemText(2, _translate("MainWindow", "dyn_time")) + self._ndColType.setItemText(3, _translate("MainWindow", "dyn_minmax")) + self.label_3.setText(_translate("MainWindow", "Color range")) + self._ndRndNew.setText(_translate("MainWindow", "New random")) + self.label_8.setText(_translate("MainWindow", "Color")) + self._ndDynText.setText(_translate("MainWindow", "

Control signal color using the colormap tab...

")) + self.groupBox_3.setTitle(_translate("MainWindow", "Real time")) + self.label_2.setText(_translate("MainWindow", "Laps")) + self._ndRtStart.setText(_translate("MainWindow", "Start")) + self._ndRtStop.setText(_translate("MainWindow", "Stop")) + self._ndRtReset.setText(_translate("MainWindow", "Reset")) + self.groupBox_4.setTitle(_translate("MainWindow", "Settings")) + self.label_4.setText(_translate("MainWindow", "Space")) + self.label_9.setText(_translate("MainWindow", "Line width")) + self.label_12.setText(_translate("MainWindow", "Scale (x, y)")) + self.groupBox_15.setTitle(_translate("MainWindow", "Info")) + self.label_16.setText(_translate("MainWindow", "Title")) + self.label_39.setText(_translate("MainWindow", "Y label")) + self.label_17.setText(_translate("MainWindow", "X label")) + self._ndGridTog.setText(_translate("MainWindow", "Grid")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Ndplt), _translate("MainWindow", "Nd-Plot")) + self.groupBox_32.setTitle(_translate("MainWindow", "Axis selection")) + self._1dAxShape.setText(_translate("MainWindow", "data.shape")) + self.label_97.setText(_translate("MainWindow", "Y axis")) + self.label_96.setText(_translate("MainWindow", "X axis")) + self.label_98.setText(_translate("MainWindow", "Index")) + self._1dAxCheckTxt.setText(_translate("MainWindow", "

All axis must be different...

")) + self.groupBox_33.setTitle(_translate("MainWindow", "Plot")) + self.label_100.setText(_translate("MainWindow", "nfft")) + self.label_102.setText(_translate("MainWindow", "Step")) + self.label.setText(_translate("MainWindow", "f start")) + self.label_130.setText(_translate("MainWindow", "f end")) + self.label_91.setText(_translate("MainWindow", "Plot data as")) + self._1dPltPick.setItemText(0, _translate("MainWindow", "line")) + self._1dPltPick.setItemText(1, _translate("MainWindow", "histogram")) + self._1dPltPick.setItemText(2, _translate("MainWindow", "spectrogram")) + self._1dPltPick.setItemText(3, _translate("MainWindow", "marker")) + self.label_92.setText(_translate("MainWindow", "Bins")) + self.label_99.setText(_translate("MainWindow", "Line width")) + self.label_101.setText(_translate("MainWindow", "Method")) + self._1dLineMeth.setItemText(0, _translate("MainWindow", "gl")) + self._1dLineMeth.setItemText(1, _translate("MainWindow", "agg")) + self.label_120.setText(_translate("MainWindow", "Size")) + self._1dColBox.setTitle(_translate("MainWindow", "Color")) + self.label_93.setText(_translate("MainWindow", "Type")) + self._1dColType.setItemText(0, _translate("MainWindow", "random")) + self._1dColType.setItemText(1, _translate("MainWindow", "uniform")) + self._1dColType.setItemText(2, _translate("MainWindow", "dyn_time")) + self._1dColType.setItemText(3, _translate("MainWindow", "dyn_minmax")) + self.label_94.setText(_translate("MainWindow", "Color range")) + self._1dRndNew.setText(_translate("MainWindow", "New random")) + self.label_95.setText(_translate("MainWindow", "Color")) + self._1dDynText.setText(_translate("MainWindow", "

Control signal color using the colormap tab...

")) + self.groupBox_34.setTitle(_translate("MainWindow", "Interpolation")) + self.label_118.setText(_translate("MainWindow", "Type")) + self._1dInterType.setItemText(0, _translate("MainWindow", "None")) + self._1dInterType.setItemText(1, _translate("MainWindow", "linear")) + self._1dInterType.setItemText(2, _translate("MainWindow", "nearest")) + self._1dInterType.setItemText(3, _translate("MainWindow", "zero")) + self._1dInterType.setItemText(4, _translate("MainWindow", "slinear")) + self._1dInterType.setItemText(5, _translate("MainWindow", "quadratic")) + self._1dInterType.setItemText(6, _translate("MainWindow", "cubic")) + self.label_119.setText(_translate("MainWindow", "Step")) + self.groupBox_31.setTitle(_translate("MainWindow", "Info")) + self.label_90.setText(_translate("MainWindow", "Y label")) + self.label_88.setText(_translate("MainWindow", "Title")) + self.label_89.setText(_translate("MainWindow", "X label")) + self._1dGridTog.setText(_translate("MainWindow", "Grid")) + self._1dPltTab.setTabText(self._1dPltTab.indexOf(self._1dSigTab), _translate("MainWindow", "1d-Signal")) + self.groupBox_39.setTitle(_translate("MainWindow", "Axis selection")) + self._imAxShape.setText(_translate("MainWindow", "data.shape")) + self.label_126.setText(_translate("MainWindow", "Y axis")) + self.label_127.setText(_translate("MainWindow", "X axis")) + self.label_128.setText(_translate("MainWindow", "Index")) + self._imAxZTxt.setText(_translate("MainWindow", "Z axis")) + self.label_129.setText(_translate("MainWindow", "Move along")) + self._imAxIndTxt.setText(_translate("MainWindow", "Z-Axis")) + self._imAxCheckTxt.setText(_translate("MainWindow", "

All axis must be different...

")) + self._1dPltTab.setTabText(self._1dPltTab.indexOf(self._2dSigTab), _translate("MainWindow", "2d-Signal")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_1dPlt), _translate("MainWindow", "Inspect")) + self.label_125.setText(_translate("MainWindow", "Object")) + self._cbObjects.setItemText(0, _translate("MainWindow", "ndplt")) + self._cbObjects.setItemText(1, _translate("MainWindow", "line")) + self._cbObjects.setItemText(2, _translate("MainWindow", "marker")) + self._cbObjects.setItemText(3, _translate("MainWindow", "spectrogram")) + self._cbObjects.setItemText(4, _translate("MainWindow", "image")) + self.label_10.setText(_translate("MainWindow", "Colormap")) + self._cbInvert.setText(_translate("MainWindow", "Invert")) + self._cbAutoScale.setText(_translate("MainWindow", "Auto-scale")) + self.label_18.setText(_translate("MainWindow", "clim")) + self._cbVminChk.setToolTip(_translate("MainWindow", "Every values under vmin will be set to the \"under\" color")) + self._cbVminChk.setText(_translate("MainWindow", "vmin")) + self._cbVmaxChk.setText(_translate("MainWindow", "vmax")) + self.qUnder_txt.setText(_translate("MainWindow", "Under")) + self.qOver_txt.setText(_translate("MainWindow", "Over")) + self.label_11.setText(_translate("MainWindow", "Colorbar label: ")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Cmap), _translate("MainWindow", "Colormap")) + self.menuFiles.setTitle(_translate("MainWindow", "Files")) + self.menuDisplay.setTitle(_translate("MainWindow", "Display")) + self.menuPanel.setTitle(_translate("MainWindow", "Panel")) + self.menuSettings.setTitle(_translate("MainWindow", "Settings")) + self.menuHelp.setTitle(_translate("MainWindow", "Help")) + self.actionSave.setText(_translate("MainWindow", "Save")) + self.actionLoad.setText(_translate("MainWindow", "Load")) + self.actionCortical_repartition.setText(_translate("MainWindow", "Cortical repartition")) + self.actionCortical.setText(_translate("MainWindow", "Cortical")) + self.actionSagittal.setText(_translate("MainWindow", "Sagittal")) + self.actionAxial.setText(_translate("MainWindow", "Axial")) + self.actionCamera.setText(_translate("MainWindow", "Camera")) + self.actionLeft.setText(_translate("MainWindow", "Left")) + self.actionRight.setText(_translate("MainWindow", "Right")) + self.actionQuick_settings.setText(_translate("MainWindow", "Quick settings")) + self.actionQuick_settings.setShortcut(_translate("MainWindow", "Ctrl+D")) + self.actionClose.setText(_translate("MainWindow", "Close")) + self.actionClose.setShortcut(_translate("MainWindow", "Ctrl+Q")) + self.actionProjection.setText(_translate("MainWindow", "Projection")) + self.actionProjection.setToolTip(_translate("MainWindow", "

Find all vertices under a distance of t_radius with each source and project s_data to the surface

")) + self.actionProjection.setShortcut(_translate("MainWindow", "Ctrl+P")) + self.actionRepartition.setText(_translate("MainWindow", "Repartition")) + self.actionRepartition.setShortcut(_translate("MainWindow", "Ctrl+R")) + self.actionShortcuts.setText(_translate("MainWindow", "Shortcuts")) + self.actionShortcuts.setShortcut(_translate("MainWindow", "Ctrl+T")) + self.actionUi_settings.setText(_translate("MainWindow", "Ui settings")) + self.actionNdPlt.setText(_translate("MainWindow", "Nd-plot")) + self.actionOnedPlt.setText(_translate("MainWindow", "1d-plot")) + self.actionImage.setText(_translate("MainWindow", "Image")) + self.actionColormap.setText(_translate("MainWindow", "Colormap")) + self.actionAbout.setText(_translate("MainWindow", "About")) + self.actionDocumentation.setText(_translate("MainWindow", "Documentation")) diff --git a/visbrain/ndviz/interface/uiElements/uiSettings.py b/visbrain/ndviz/interface/uiElements/uiSettings.py index 2f1e09474..7b7b4f653 100644 --- a/visbrain/ndviz/interface/uiElements/uiSettings.py +++ b/visbrain/ndviz/interface/uiElements/uiSettings.py @@ -1,7 +1,7 @@ """Main class for settings managment.""" import os -from PyQt4.QtGui import * +from PyQt5 import QtWidgets, QtGui from vispy import io @@ -19,28 +19,28 @@ def __init__(self): # ------------------------------- FILE ------------------------------- # Screenshot : - screenshot = QAction("Screenshot", self) + screenshot = QtWidgets.QAction("Screenshot", self) screenshot.setShortcut("Ctrl+N") screenshot.triggered.connect(self._screenshot) self.menuFiles.addAction(screenshot) # Save : - save = QAction("Save", self) + save = QtWidgets.QAction("Save", self) save.setShortcut("Ctrl+S") save.triggered.connect(self.saveFile) self.menuFiles.addAction(save) # Load : - openm = QAction("Load", self) + openm = QtWidgets.QAction("Load", self) openm.setShortcut("Ctrl+O") openm.triggered.connect(self.openFile) self.menuFiles.addAction(openm) # Quit : - exitAction = QAction(QIcon('exit.png'), '&Exit', self) + exitAction = QtWidgets.QAction(QtGui.QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') - exitAction.triggered.connect(qApp.quit) + exitAction.triggered.connect(QtWidgets.qApp.quit) self.menuFiles.addAction(exitAction) # ------------------------------- MENU ------------------------------- diff --git a/visbrain/ndviz/interface/uiInit.py b/visbrain/ndviz/interface/uiInit.py index 9b4d67675..19ae9a559 100644 --- a/visbrain/ndviz/interface/uiInit.py +++ b/visbrain/ndviz/interface/uiInit.py @@ -6,7 +6,7 @@ * User shortcuts """ -from PyQt4 import QtGui +from PyQt5 import QtWidgets from vispy import app, scene from .gui import Ui_MainWindow @@ -32,7 +32,7 @@ def __init__(self, axis=True, x_label='', x_heightMax=80, y_label='', # Create the main canvas : self.canvas = scene.SceneCanvas(keys='interactive', bgcolor=bgcolor, - show=True, title=name, **cargs) + show=False, title=name, **cargs) # Add axis : if axis: @@ -228,7 +228,7 @@ def on_mouse_press(event): pass -class uiInit(QtGui.QMainWindow, Ui_MainWindow, app.Canvas, vbShortcuts): +class uiInit(QtWidgets.QMainWindow, Ui_MainWindow, app.Canvas, vbShortcuts): """Group and initialize the graphical elements and interactions. Kargs: diff --git a/visbrain/ndviz/ndviz.py b/visbrain/ndviz/ndviz.py index a11af8c28..ea25ff9b1 100644 --- a/visbrain/ndviz/ndviz.py +++ b/visbrain/ndviz/ndviz.py @@ -1,7 +1,7 @@ """Top level Ndviz class.""" import numpy as np -from PyQt4 import QtGui +from PyQt5 import QtWidgets import sys import vispy.app as visapp @@ -12,6 +12,8 @@ from warnings import warn # from ..utils import id # from .user import userfcn +import sip +sip.setdestroyonexit(False) class Ndviz(uiInit, visuals, uiElements): @@ -96,7 +98,7 @@ def __init__(self, data, sf=1, **kwargs): # ====================== App creation ====================== # Create the app and initialize all graphical elements : - self._app = QtGui.QApplication(sys.argv) + self._app = QtWidgets.QApplication(sys.argv) uiInit.__init__(self, bgcolor, nd_title, nd_xlabel, nd_ylabel, od_title, od_xlabel, od_ylabel) diff --git a/visbrain/sleep/ico/sleep.svg b/visbrain/sleep/ico/sleep.svg index 51dc1db43..4b5251d84 100644 --- a/visbrain/sleep/ico/sleep.svg +++ b/visbrain/sleep/ico/sleep.svg @@ -10,9 +10,9 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="32" - height="32" - viewBox="0 0 32 32" + width="24" + height="24" + viewBox="0 0 24 24" id="svg2" version="1.1" inkscape:version="0.91 r" @@ -143,1629 +143,7 @@ y="290.94696" x="137.19537" id="image4176" - xlink:href="data:image/png;base64,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 -" + xlink:href="data:image/png;base64,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 " preserveAspectRatio="none" height="52.605846" width="52.605846" @@ -1779,9 +157,9 @@ IvwDVhemvz/7P6zr6J3JpcYbAAAAAElFTkSuQmCC borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="7.6955719" - inkscape:cx="8.88827" - inkscape:cy="11.77833" + inkscape:zoom="12.490274" + inkscape:cx="0.71171512" + inkscape:cy="12.028315" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" @@ -1792,12 +170,14 @@ IvwDVhemvz/7P6zr6J3JpcYbAAAAAElFTkSuQmCC inkscape:window-width="1916" inkscape:window-height="1033" inkscape:window-x="0" - inkscape:window-y="22" + inkscape:window-y="15" inkscape:window-maximized="0" units="px"> + id="grid4204" + originx="0.25000171" + originy="0.24998543" /> @@ -1807,7 +187,7 @@ IvwDVhemvz/7P6zr6J3JpcYbAAAAAElFTkSuQmCC image/svg+xml - + @@ -1815,13 +195,14 @@ IvwDVhemvz/7P6zr6J3JpcYbAAAAAElFTkSuQmCC inkscape:label="Calque 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-151.93384,-297.64781)"> + transform="translate(-151.68384,-305.8978)"> + inkscape:export-ydpi="708.92316" + transform="matrix(0.73846158,0,0,0.73846158,39.671151,86.280948)">


", None)) - self.label_41.setText(_translate("MainWindow", "Manage visible channels, amplitude,\n" -"spectrogram, hypnogram and the time axis", None)) - self.groupBox.setToolTip(_translate("MainWindow", "

Select the channels to be displayed and control the amplitudes of each one of them.

", None)) - self.groupBox.setTitle(_translate("MainWindow", "Select channels to display", None)) - self._PanScrollChan.setToolTip(_translate("MainWindow", "

", None)) - self.groupBox_7.setTitle(_translate("MainWindow", "Amplitude control", None)) - self.label_35.setText(_translate("MainWindow", "Set all amplitudes to: ", None)) - self._PanChanSelectAll.setToolTip(_translate("MainWindow", "

Display all channels

", None)) - self._PanChanSelectAll.setText(_translate("MainWindow", "Display all channels", None)) - self._PanChanDeselectAll.setToolTip(_translate("MainWindow", "

Hide all channels

", None)) - self._PanChanDeselectAll.setText(_translate("MainWindow", "Hide all channels", None)) - self._PanAmpSym.setText(_translate("MainWindow", "Use symetric amplitudes", None)) - self._PanAmpAuto.setText(_translate("MainWindow", "Use auto-ajusted amplitudes", None)) - self._PanAllAmpMin.setToolTip(_translate("MainWindow", "

Change minimum amplitude for all channels

", None)) - self._PanAllAmpMax.setToolTip(_translate("MainWindow", "

Change maximum amplitude for all channels

", None)) - self.toolBox_2.setItemText(self.toolBox_2.indexOf(self.page_3), _translate("MainWindow", "Channels", None)) - self.groupBox_2.setTitle(_translate("MainWindow", "Spectrogram", None)) - self._PanSpecViz.setToolTip(_translate("MainWindow", "

Display / hide the spectrogram

", None)) - self._PanSpecViz.setText(_translate("MainWindow", "Visible", None)) - self._PanSpecIndic.setToolTip(_translate("MainWindow", "

Display / hide the time window indicator

", None)) - self._PanSpecIndic.setText(_translate("MainWindow", "Indicator", None)) - self._PanSpecZoom.setToolTip(_translate("MainWindow", "

Zoom over the spectrogram

", None)) - self._PanSpecZoom.setText(_translate("MainWindow", "Zoom", None)) - self._PanSpecFend.setToolTip(_translate("MainWindow", "

Ending frequency for the spectrogram

", None)) - self.label_17.setText(_translate("MainWindow", "f end", None)) - self.label_15.setText(_translate("MainWindow", "Overlap", None)) - self.label_16.setText(_translate("MainWindow", "f start", None)) - self._PanSpecCon.setToolTip(_translate("MainWindow", "

Change the contrast of the spectrogram

", None)) - self.label_24.setText(_translate("MainWindow", "Contraste", None)) - self.label_13.setText(_translate("MainWindow", "Channel", None)) - self._PanSpecStep.setToolTip(_translate("MainWindow", "

Overlap between each consecutive windows.

", None)) - self._PanSpecNfft.setToolTip(_translate("MainWindow", "

Length of each time window for computing the spectrogram

", None)) - self._PanSpecFstart.setToolTip(_translate("MainWindow", "

Starting frequency for the spectrogram

", None)) - self.label_14.setText(_translate("MainWindow", "Length", None)) - self.label_2.setText(_translate("MainWindow", "sec", None)) - self._PanSpecCmap.setToolTip(_translate("MainWindow", "

Colormap for the spectrogram

", None)) - self.label_55.setText(_translate("MainWindow", "Settings", None)) + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "Sleep")) + self.QuickSettings.setToolTip(_translate("MainWindow", "


")) + self.groupBox.setToolTip(_translate("MainWindow", "

Select the channels to be displayed and control the amplitudes of each one of them.

")) + self.groupBox.setTitle(_translate("MainWindow", "Select channels to display")) + self._PanScrollChan.setToolTip(_translate("MainWindow", "

")) + self.groupBox_7.setTitle(_translate("MainWindow", "Amplitude control")) + self.label_35.setText(_translate("MainWindow", "Set all amplitudes to: ")) + self._PanChanSelectAll.setToolTip(_translate("MainWindow", "

Display all channels

")) + self._PanChanSelectAll.setText(_translate("MainWindow", "Display all channels")) + self._PanChanDeselectAll.setToolTip(_translate("MainWindow", "

Hide all channels

")) + self._PanChanDeselectAll.setText(_translate("MainWindow", "Hide all channels")) + self._PanAmpSym.setText(_translate("MainWindow", "Use symetric amplitudes")) + self._PanAmpAuto.setText(_translate("MainWindow", "Use auto-ajusted amplitudes")) + self._PanAllAmpMin.setToolTip(_translate("MainWindow", "

Change minimum amplitude for all channels

")) + self._PanAllAmpMax.setToolTip(_translate("MainWindow", "

Change maximum amplitude for all channels

")) + self.toolBox_2.setItemText(self.toolBox_2.indexOf(self.page_3), _translate("MainWindow", "Channels")) + self._PanSpecFstart.setToolTip(_translate("MainWindow", "

Starting frequency for the spectrogram

")) + self._PanSpecFend.setToolTip(_translate("MainWindow", "

Ending frequency for the spectrogram

")) + self.label_17.setText(_translate("MainWindow", "f end")) + self.label_15.setText(_translate("MainWindow", "Overlap")) + self.label_16.setText(_translate("MainWindow", "f start")) + self._PanSpecCon.setToolTip(_translate("MainWindow", "

Change the contrast of the spectrogram

")) + self.label_24.setText(_translate("MainWindow", "Contraste")) + self.label_13.setText(_translate("MainWindow", "Channel")) + self._PanSpecStep.setToolTip(_translate("MainWindow", "

Overlap between each consecutive windows.

")) + self._PanSpecNfft.setToolTip(_translate("MainWindow", "

Length of each time window for computing the spectrogram

")) + self.label_14.setText(_translate("MainWindow", "Length")) + self.label_2.setText(_translate("MainWindow", "sec")) + self._PanSpecCmap.setToolTip(_translate("MainWindow", "

Colormap for the spectrogram

")) + self.label_55.setText(_translate("MainWindow", "Settings")) self.label_54.setText(_translate("MainWindow", "Apply\n" -"on", None)) - self.label_23.setText(_translate("MainWindow", "sec", None)) - self._PanSpecApply.setToolTip(_translate("MainWindow", "

Compute the spectrogram on the selected channel and using the time length, overlap, [fstart, fend], colormap and contrast.

", None)) - self._PanSpecApply.setText(_translate("MainWindow", "Apply", None)) - self._PanSpecChan.setToolTip(_translate("MainWindow", "

Select to channel used for the spectrogram

", None)) - self._PanSpecCmapInv.setText(_translate("MainWindow", "Reversed", None)) - self.label_29.setText(_translate("MainWindow", "Colormap", None)) - self._PanHypGrp.setTitle(_translate("MainWindow", "Hypnogram", None)) - self._PanHypViz.setToolTip(_translate("MainWindow", "

Display / hide the hypnogram

", None)) - self._PanHypViz.setText(_translate("MainWindow", "Visible", None)) - self._PanHypIndic.setToolTip(_translate("MainWindow", "

Display / hide the time window indicator

", None)) - self._PanHypIndic.setText(_translate("MainWindow", "Indicator", None)) - self._PanHypZoom.setToolTip(_translate("MainWindow", "

Zoom over the hypnogram

", None)) - self._PanHypZoom.setText(_translate("MainWindow", "Zoom", None)) - self.groupBox_10.setTitle(_translate("MainWindow", "Time axis", None)) - self._PanTimeIndic.setToolTip(_translate("MainWindow", "

Display / hide the time window indicator

", None)) - self._PanTimeIndic.setText(_translate("MainWindow", "Indicator", None)) - self._PanTimeViz.setToolTip(_translate("MainWindow", "

Display / hide the time axis

", None)) - self._PanTimeViz.setText(_translate("MainWindow", "Visible", None)) - self._PanTimeZoom.setToolTip(_translate("MainWindow", "

Zoom over the time axis

", None)) - self._PanTimeZoom.setText(_translate("MainWindow", "Zoom", None)) - self.toolBox_2.setItemText(self.toolBox_2.indexOf(self.page_4), _translate("MainWindow", "Spectrogram // Hypnogram // Time axis", None)) - self._PanTopoViz.setText(_translate("MainWindow", "Visible", None)) - self.label_67.setText(_translate("MainWindow", "Colormap", None)) - self.label_65.setText(_translate("MainWindow", "Display", None)) - self._PanTopoAutoClim.setText(_translate("MainWindow", "Use automatic limits", None)) - self.label_63.setText(_translate("MainWindow", "Properties", None)) - self.label_69.setText(_translate("MainWindow", "Fmin", None)) - self.label_70.setText(_translate("MainWindow", "Fmax", None)) - self._PanTopoDisp.setItemText(0, _translate("MainWindow", "raw", None)) - self._PanTopoDisp.setItemText(1, _translate("MainWindow", "filter", None)) - self._PanTopoDisp.setItemText(2, _translate("MainWindow", "amplitude", None)) - self._PanTopoDisp.setItemText(3, _translate("MainWindow", "power", None)) - self.label_66.setText(_translate("MainWindow", "Clim", None)) - self._PanTopoApply.setText(_translate("MainWindow", "Apply", None)) - self.toolBox_2.setItemText(self.toolBox_2.indexOf(self.page_5), _translate("MainWindow", "Topoplot", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Panels), _translate("MainWindow", "Panels", None)) - self.label_42.setText(_translate("MainWindow", "Set of signal processing tools (remove the mean and\n" -"trend, filtering)", None)) - self.label_59.setText(_translate("MainWindow", "Warning : re-referencing can only be achieved once", None)) - self._ToolsRefIgnore.setToolTip(_translate("MainWindow", "

When this option is checked, channels that are not re-referenced are going to be ignored in the interface (Ex : if channels is [ O1, O2, O3, Cz, Pz ] the bipolarized channels will be [ O1, O2-O1, O3-O2, Cz, Pz ] but if this checkbox is activated you will only see the clean version [ O2-O1, 03-O2 ] )

", None)) - self._ToolsRefIgnore.setText(_translate("MainWindow", "Remove non-referenced channels", None)) - self.label_56.setText(_translate("MainWindow", "Use as reference", None)) - self._ToolsRefLst.setToolTip(_translate("MainWindow", "

Channel to use as the reference

", None)) - self.label_60.setText(_translate("MainWindow", "Type", None)) - self.label_61.setText(_translate("MainWindow", "Settings", None)) - self._ToolsRefIgn.setToolTip(_translate("MainWindow", "

If some channels doesn\'t need to be re-referenced, and if you want to visualize them, be sure to deactivate "Ignore non-referenced channels"

", None)) +"on")) + self.label_23.setText(_translate("MainWindow", "sec")) + self._PanSpecApply.setToolTip(_translate("MainWindow", "

Compute the spectrogram on the selected channel and using the time length, overlap, [fstart, fend], colormap and contrast.

")) + self._PanSpecApply.setText(_translate("MainWindow", "Apply")) + self._PanSpecChan.setToolTip(_translate("MainWindow", "

Select to channel used for the spectrogram

")) + self._PanSpecCmapInv.setText(_translate("MainWindow", "Reversed")) + self.label_29.setText(_translate("MainWindow", "Colormap")) + self.toolBox_2.setItemText(self.toolBox_2.indexOf(self.page_4), _translate("MainWindow", "Spectrogram")) + self.label_67.setText(_translate("MainWindow", "Colormap")) + self.label_65.setText(_translate("MainWindow", "Display")) + self._PanTopoAutoClim.setText(_translate("MainWindow", "Use automatic limits")) + self.label_63.setText(_translate("MainWindow", "Properties")) + self.label_69.setText(_translate("MainWindow", "Fmin")) + self.label_70.setText(_translate("MainWindow", "Fmax")) + self._PanTopoDisp.setItemText(0, _translate("MainWindow", "raw")) + self._PanTopoDisp.setItemText(1, _translate("MainWindow", "filter")) + self._PanTopoDisp.setItemText(2, _translate("MainWindow", "amplitude")) + self._PanTopoDisp.setItemText(3, _translate("MainWindow", "power")) + self.label_66.setText(_translate("MainWindow", "Clim")) + self._PanTopoApply.setText(_translate("MainWindow", "Apply")) + self.toolBox_2.setItemText(self.toolBox_2.indexOf(self.page_5), _translate("MainWindow", "Topoplot")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Panels), _translate("MainWindow", "Panels")) + self.label_59.setText(_translate("MainWindow", "Warning : re-referencing can only be achieved once")) + self._ToolsRefIgnore.setToolTip(_translate("MainWindow", "

When this option is checked, channels that are not re-referenced are going to be ignored in the interface (Ex : if channels is [ O1, O2, O3, Cz, Pz ] the bipolarized channels will be [ O1, O2-O1, O3-O2, Cz, Pz ] but if this checkbox is activated you will only see the clean version [ O2-O1, 03-O2 ] )

")) + self._ToolsRefIgnore.setText(_translate("MainWindow", "Remove non-referenced channels")) + self.label_56.setText(_translate("MainWindow", "Use as reference")) + self._ToolsRefLst.setToolTip(_translate("MainWindow", "

Channel to use as the reference

")) + self.label_60.setText(_translate("MainWindow", "Type")) + self.label_61.setText(_translate("MainWindow", "Settings")) + self._ToolsRefIgn.setToolTip(_translate("MainWindow", "

If some channels doesn\'t need to be re-referenced, and if you want to visualize them, be sure to deactivate "Ignore non-referenced channels"

")) self._ToolsRefIgn.setText(_translate("MainWindow", "Add channels that don\'t need to be\n" -"re-referenced", None)) - self._ToolsRefMeth.setItemText(0, _translate("MainWindow", "Use one channel as reference", None)) - self._ToolsRefMeth.setItemText(1, _translate("MainWindow", "Common average", None)) - self._ToolsRefMeth.setItemText(2, _translate("MainWindow", "Bipolarization", None)) - self._ToolsRefApply.setText(_translate("MainWindow", "Apply", None)) - self.toolBox.setItemText(self.toolBox.indexOf(self.page), _translate("MainWindow", "Re-referencing", None)) - self.groupBox_5.setTitle(_translate("MainWindow", "Mean and trend", None)) - self._SigMean.setText(_translate("MainWindow", "Remove mean", None)) - self._SigTrend.setText(_translate("MainWindow", "Remove linear trend", None)) - self.groupBox_6.setTitle(_translate("MainWindow", "Filtering", None)) - self._SigFilt.setToolTip(_translate("MainWindow", "

Filter your data and spectrogram :

- Select the filter type (bandpass / bandstop / highpass / lowpass)

- Select the frequencies for filtering

- Select the filter method (butterworth or bessel) and its order

", None)) - self._SigFilt.setText(_translate("MainWindow", "Enable", None)) - self._SigFiltApply.setText(_translate("MainWindow", "Apply", None)) - self.label_18.setText(_translate("MainWindow", "Filter type", None)) - self.label_58.setText(_translate("MainWindow", "Settings", None)) - self.label_7.setText(_translate("MainWindow", "Frequency", None)) - self.label_9.setText(_translate("MainWindow", "Fmin", None)) - self.label_8.setText(_translate("MainWindow", "Fmax", None)) - self.label_10.setText(_translate("MainWindow", "Method", None)) - self._SigFiltBand.setToolTip(_translate("MainWindow", "

- bandpass: keep only frequencies between [fmin, fmax]

- bandstop: remove frequencies between [fmin, fmax]

- lowpass: keep only frequencies under fmax

- highpass: keep only frequencies over fmin

", None)) - self._SigFiltBand.setItemText(0, _translate("MainWindow", "bandpass", None)) - self._SigFiltBand.setItemText(1, _translate("MainWindow", "bandstop", None)) - self._SigFiltBand.setItemText(2, _translate("MainWindow", "lowpass", None)) - self._SigFiltBand.setItemText(3, _translate("MainWindow", "highpass", None)) - self._SigFiltOrder.setToolTip(_translate("MainWindow", "

Choose filter order and control narrow band. It is not recommended to use filter order over 3 (can provoc distorsion).

", None)) - self._SigFiltMeth.setItemText(0, _translate("MainWindow", "butterworth", None)) - self._SigFiltMeth.setItemText(1, _translate("MainWindow", "bessel", None)) - self.label_11.setText(_translate("MainWindow", "order", None)) - self.label_68.setText(_translate("MainWindow", "Display", None)) - self._SigFiltDisp.setToolTip(_translate("MainWindow", "

Display the signal, in a specific frequency band as :

- "filter" : simply, the filtered signal

- "amplitude" : the amplitude of the signal

- "power" : the power of the signal

- "phase" : the phase of the signal

", None)) - self._SigFiltDisp.setItemText(0, _translate("MainWindow", "filter", None)) - self._SigFiltDisp.setItemText(1, _translate("MainWindow", "amplitude", None)) - self._SigFiltDisp.setItemText(2, _translate("MainWindow", "power", None)) - self._SigFiltDisp.setItemText(3, _translate("MainWindow", "phase", None)) - self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), _translate("MainWindow", "Signal processing", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Tools), _translate("MainWindow", "Tools", None)) - self.label_44.setText(_translate("MainWindow", "Get and export usefull informations about the\n" -"hypnogram. Those informations change while editing it.", None)) +"re-referenced")) + self._ToolsRefMeth.setItemText(0, _translate("MainWindow", "Use one channel as reference")) + self._ToolsRefMeth.setItemText(1, _translate("MainWindow", "Common average")) + self._ToolsRefMeth.setItemText(2, _translate("MainWindow", "Bipolarization")) + self._ToolsRefApply.setText(_translate("MainWindow", "Apply")) + self.toolBox.setItemText(self.toolBox.indexOf(self.page), _translate("MainWindow", "Re-referencing")) + self.groupBox_5.setTitle(_translate("MainWindow", "Mean and trend")) + self._SigMean.setText(_translate("MainWindow", "Remove mean")) + self._SigTrend.setText(_translate("MainWindow", "Remove linear trend")) + self.groupBox_6.setTitle(_translate("MainWindow", "Filtering")) + self._SigFilt.setToolTip(_translate("MainWindow", "

Filter your data and spectrogram :

- Select the filter type (bandpass / bandstop / highpass / lowpass)

- Select the frequencies for filtering

- Select the filter method (butterworth or bessel) and its order

")) + self._SigFilt.setText(_translate("MainWindow", "Enable")) + self._SigFiltApply.setText(_translate("MainWindow", "Apply")) + self.label_18.setText(_translate("MainWindow", "Filter type")) + self.label_58.setText(_translate("MainWindow", "Settings")) + self.label_7.setText(_translate("MainWindow", "Frequency")) + self.label_9.setText(_translate("MainWindow", "Fmin")) + self.label_8.setText(_translate("MainWindow", "Fmax")) + self.label_10.setText(_translate("MainWindow", "Method")) + self._SigFiltBand.setToolTip(_translate("MainWindow", "

- bandpass: keep only frequencies between [fmin, fmax]

- bandstop: remove frequencies between [fmin, fmax]

- lowpass: keep only frequencies under fmax

- highpass: keep only frequencies over fmin

")) + self._SigFiltBand.setItemText(0, _translate("MainWindow", "bandpass")) + self._SigFiltBand.setItemText(1, _translate("MainWindow", "bandstop")) + self._SigFiltBand.setItemText(2, _translate("MainWindow", "lowpass")) + self._SigFiltBand.setItemText(3, _translate("MainWindow", "highpass")) + self._SigFiltOrder.setToolTip(_translate("MainWindow", "

Choose filter order and control narrow band. It is not recommended to use filter order over 3 (can provoc distorsion).

")) + self._SigFiltMeth.setItemText(0, _translate("MainWindow", "butterworth")) + self._SigFiltMeth.setItemText(1, _translate("MainWindow", "bessel")) + self.label_11.setText(_translate("MainWindow", "order")) + self.label_68.setText(_translate("MainWindow", "Display")) + self._SigFiltDisp.setToolTip(_translate("MainWindow", "

Display the signal, in a specific frequency band as :

- "filter" : simply, the filtered signal

- "amplitude" : the amplitude of the signal

- "power" : the power of the signal

- "phase" : the phase of the signal

")) + self._SigFiltDisp.setItemText(0, _translate("MainWindow", "filter")) + self._SigFiltDisp.setItemText(1, _translate("MainWindow", "amplitude")) + self._SigFiltDisp.setItemText(2, _translate("MainWindow", "power")) + self._SigFiltDisp.setItemText(3, _translate("MainWindow", "phase")) + self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), _translate("MainWindow", "Signal processing")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Tools), _translate("MainWindow", "Tools")) item = self._infoTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Infos", None)) + item.setText(_translate("MainWindow", "Infos")) item = self._infoTable.horizontalHeaderItem(1) - item.setText(_translate("MainWindow", "Values", None)) - self.label_32.setText(_translate("MainWindow", "Time window", None)) - self._infoExport.setText(_translate("MainWindow", "Export", None)) - self.label_33.setText(_translate("MainWindow", "seconds", None)) - self._infoExportAs.setItemText(0, _translate("MainWindow", "CSV file (*.csv)", None)) - self._infoExportAs.setItemText(1, _translate("MainWindow", "Text file (*.txt)", None)) - self.label_34.setText(_translate("MainWindow", "Export as", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Info), _translate("MainWindow", "Infos", None)) - self.label_43.setText(_translate("MainWindow", "Score the hypnogram by manually adding / removing\n" -" lines. Alternatively, you can directly edit it from the grah.", None)) + item.setText(_translate("MainWindow", "Values")) + self.label_32.setText(_translate("MainWindow", "Time window")) + self.label_33.setText(_translate("MainWindow", "seconds")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Info), _translate("MainWindow", "Infos")) self._scoreTable.setSortingEnabled(True) item = self._scoreTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "From (minutes)", None)) + item.setText(_translate("MainWindow", "From (minutes)")) item = self._scoreTable.horizontalHeaderItem(1) - item.setText(_translate("MainWindow", "To (minutes)", None)) + item.setText(_translate("MainWindow", "To (minutes)")) item = self._scoreTable.horizontalHeaderItem(2) - item.setText(_translate("MainWindow", "Stage", None)) - self._scoreAdd.setText(_translate("MainWindow", "Add line", None)) - self._scoreRm.setText(_translate("MainWindow", "Remove line", None)) - self._scoreExportAs.setItemText(0, _translate("MainWindow", "CSV file (*.csv)", None)) - self._scoreExportAs.setItemText(1, _translate("MainWindow", "Text file (*.txt)", None)) - self.label_36.setText(_translate("MainWindow", "Export as: ", None)) - self._scoreExport.setText(_translate("MainWindow", "Export", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Score), _translate("MainWindow", "Scoring", None)) - self.label_45.setText(_translate("MainWindow", "Perform automatic detection of several sleep microstructural features either on\n" -"selected, visible or all channels.", None)) - self.groupBox_3.setTitle(_translate("MainWindow", "Detection type", None)) - self.label_39.setText(_translate("MainWindow", "Type", None)) - self.label_25.setText(_translate("MainWindow", "On channel", None)) - self._ToolDetectType.setToolTip(_translate("MainWindow", "

Choose the detection type

", None)) - self._ToolDetectType.setItemText(0, _translate("MainWindow", "REM", None)) - self._ToolDetectType.setItemText(1, _translate("MainWindow", "Spindles", None)) - self._ToolDetectType.setItemText(2, _translate("MainWindow", "Peaks", None)) - self._ToolDetectType.setItemText(3, _translate("MainWindow", "Slow waves", None)) - self._ToolDetectType.setItemText(4, _translate("MainWindow", "K-complexes", None)) - self._ToolDetectType.setItemText(5, _translate("MainWindow", "Muscle twitches", None)) - self._ToolRdViz.setText(_translate("MainWindow", "Visible", None)) + item.setText(_translate("MainWindow", "Stage")) + self._scoreAdd.setText(_translate("MainWindow", "Add line")) + self._scoreRm.setText(_translate("MainWindow", "Remove line")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Score), _translate("MainWindow", "Scoring")) + self.groupBox_3.setTitle(_translate("MainWindow", "Detection type")) + self.label_39.setText(_translate("MainWindow", "Type")) + self.label_25.setText(_translate("MainWindow", "On channel")) + self._ToolDetectType.setToolTip(_translate("MainWindow", "

Choose the detection type

")) + self._ToolDetectType.setItemText(0, _translate("MainWindow", "REM")) + self._ToolDetectType.setItemText(1, _translate("MainWindow", "Spindles")) + self._ToolDetectType.setItemText(2, _translate("MainWindow", "Peaks")) + self._ToolDetectType.setItemText(3, _translate("MainWindow", "Slow waves")) + self._ToolDetectType.setItemText(4, _translate("MainWindow", "K-complexes")) + self._ToolDetectType.setItemText(5, _translate("MainWindow", "Muscle twitches")) + self._ToolRdViz.setText(_translate("MainWindow", "Visible")) self.label_49.setText(_translate("MainWindow", "Apply\n" -"on", None)) - self._ToolRdSelected.setText(_translate("MainWindow", "Selected", None)) - self._ToolRdAll.setText(_translate("MainWindow", "All", None)) - self._ToolDetectChan.setToolTip(_translate("MainWindow", "

Pick up a channel to run the detection (only avaible with "Selected" option)

", None)) - self.groupBox_4.setTitle(_translate("MainWindow", "Settings", None)) - self.label_26.setText(_translate("MainWindow", "Lookahead", None)) - self._ToolPeakLook.setToolTip(_translate("MainWindow", "

Minimum distance between two peaks

", None)) - self.label_28.setText(_translate("MainWindow", "Display", None)) - self.label_27.setText(_translate("MainWindow", "seconds", None)) - self._ToolPeakMinMax.setToolTip(_translate("MainWindow", "

Search either for maximum / minimum / both

", None)) - self._ToolPeakMinMax.setItemText(0, _translate("MainWindow", "Max only", None)) - self._ToolPeakMinMax.setItemText(1, _translate("MainWindow", "Min only", None)) - self._ToolPeakMinMax.setItemText(2, _translate("MainWindow", "Min and Max", None)) - self.label_50.setText(_translate("MainWindow", "Peak", None)) - self._ToolRemTh.setToolTip(_translate("MainWindow", "

Number of standard deviation of the derivative signal

", None)) - self.label_38.setText(_translate("MainWindow", "Threshold", None)) - self._ToolRemOnly.setText(_translate("MainWindow", "Perform detection only for REM sleep", None)) - self.label_51.setText(_translate("MainWindow", "REM", None)) - self.label_40.setText(_translate("MainWindow", "Threshold", None)) - self._ToolSpinTmin.setToolTip(_translate("MainWindow", "

Minimum spindle\'s duration

", None)) - self.label_37.setText(_translate("MainWindow", "ms", None)) - self._ToolSpinRemOnly.setText(_translate("MainWindow", "Perform detection only for NREM sleep", None)) - self._ToolSpinFmin.setToolTip(_translate("MainWindow", "High-pass cutoff frequency", None)) - self.label_30.setText(_translate("MainWindow", "Tmax", None)) - self.label_22.setText(_translate("MainWindow", "Tmin", None)) - self.label_19.setText(_translate("MainWindow", "Fmin", None)) - self._ToolSpinFmax.setToolTip(_translate("MainWindow", "Low-pass cutoff frequency", None)) - self.label_21.setText(_translate("MainWindow", "Hz", None)) - self.label_52.setText(_translate("MainWindow", "Spindles", None)) - self._ToolSpinTmax.setToolTip(_translate("MainWindow", "

Maximum spindle\'s duration

", None)) - self.label_20.setText(_translate("MainWindow", "Fmax", None)) - self._ToolSpinTh.setToolTip(_translate("MainWindow", "

Look for signals having an amplitude \'Threshold\' times superior to the deviation of the filtered signal amplitude

", None)) - self.label_53.setText(_translate("MainWindow", "Slow waves", None)) - self._ToolWaveTh.setToolTip(_translate("MainWindow", "

Normalized Delta power threshold (between 0 and 1)

", None)) - self.label_46.setText(_translate("MainWindow", "Delta power (norm.)", None)) - self.label_64.setText(_translate("MainWindow", "Min / Max", None)) - self._ToolKCMinAmp.setToolTip(_translate("MainWindow", "Min amplitude of KC", None)) - self._ToolKCMaxAmp.setToolTip(_translate("MainWindow", "Max amplitude of KC", None)) - self.label_57.setText(_translate("MainWindow", "Proba threshold", None)) - self.kc_label.setText(_translate("MainWindow", "K-complexes", None)) - self._ToolKCNremOnly.setText(_translate("MainWindow", "Use hypnogram to improve detection", None)) - self._ToolKCProbTh.setToolTip(_translate("MainWindow", "Number of standard deviations of the wavelet envelope", None)) - self.label_62.setText(_translate("MainWindow", "Tmin / Tmax", None)) - self._ToolKCMinDur.setToolTip(_translate("MainWindow", "

Minimum duration of KC (ms)

", None)) - self._ToolKCMaxDur.setToolTip(_translate("MainWindow", "

Maximum duration of KC (ms)

", None)) - self.label_71.setText(_translate("MainWindow", "Amp threshold", None)) - self._ToolMTTh.setToolTip(_translate("MainWindow", "

Number of standard deviation of the derivative signal

", None)) - self.label_93.setText(_translate("MainWindow", "Threshold", None)) - self._ToolMTOnly.setText(_translate("MainWindow", "Perform detection only for REM sleep", None)) +"on")) + self._ToolRdSelected.setText(_translate("MainWindow", "Selected")) + self._ToolRdAll.setText(_translate("MainWindow", "All")) + self._ToolDetectChan.setToolTip(_translate("MainWindow", "

Pick up a channel to run the detection (only avaible with "Selected" option)

")) + self.groupBox_4.setTitle(_translate("MainWindow", "Settings")) + self.label_26.setText(_translate("MainWindow", "Lookahead")) + self._ToolPeakLook.setToolTip(_translate("MainWindow", "

Minimum distance between two peaks

")) + self.label_28.setText(_translate("MainWindow", "Display")) + self.label_27.setText(_translate("MainWindow", "seconds")) + self._ToolPeakMinMax.setToolTip(_translate("MainWindow", "

Search either for maximum / minimum / both

")) + self._ToolPeakMinMax.setItemText(0, _translate("MainWindow", "Max only")) + self._ToolPeakMinMax.setItemText(1, _translate("MainWindow", "Min only")) + self._ToolPeakMinMax.setItemText(2, _translate("MainWindow", "Min and Max")) + self.label_50.setText(_translate("MainWindow", "Peak")) + self._ToolRemTh.setToolTip(_translate("MainWindow", "

Number of standard deviation of the derivative signal

")) + self.label_38.setText(_translate("MainWindow", "Threshold")) + self._ToolRemOnly.setText(_translate("MainWindow", "Perform detection only for REM sleep")) + self.label_51.setText(_translate("MainWindow", "REM")) + self.label_40.setText(_translate("MainWindow", "Threshold")) + self._ToolSpinTmin.setToolTip(_translate("MainWindow", "

Minimum spindle\'s duration

")) + self.label_37.setText(_translate("MainWindow", "ms")) + self._ToolSpinRemOnly.setText(_translate("MainWindow", "Perform detection only for NREM sleep")) + self._ToolSpinFmin.setToolTip(_translate("MainWindow", "High-pass cutoff frequency")) + self.label_30.setText(_translate("MainWindow", "Tmax")) + self.label_22.setText(_translate("MainWindow", "Tmin")) + self.label_19.setText(_translate("MainWindow", "Fmin")) + self._ToolSpinFmax.setToolTip(_translate("MainWindow", "Low-pass cutoff frequency")) + self.label_21.setText(_translate("MainWindow", "Hz")) + self.label_52.setText(_translate("MainWindow", "Spindles")) + self._ToolSpinTmax.setToolTip(_translate("MainWindow", "

Maximum spindle\'s duration

")) + self.label_20.setText(_translate("MainWindow", "Fmax")) + self._ToolSpinTh.setToolTip(_translate("MainWindow", "

Look for signals having an amplitude \'Threshold\' times superior to the deviation of the filtered signal amplitude

")) + self.label_53.setText(_translate("MainWindow", "Slow waves")) + self._ToolWaveTh.setToolTip(_translate("MainWindow", "

Normalized Delta power threshold (between 0 and 1)

")) + self.label_46.setText(_translate("MainWindow", "Delta power (norm.)")) + self.label_64.setText(_translate("MainWindow", "Min / Max")) + self._ToolKCMinAmp.setToolTip(_translate("MainWindow", "Min amplitude of KC")) + self._ToolKCMaxAmp.setToolTip(_translate("MainWindow", "Max amplitude of KC")) + self.label_57.setText(_translate("MainWindow", "Proba threshold")) + self.kc_label.setText(_translate("MainWindow", "K-complexes")) + self._ToolKCNremOnly.setText(_translate("MainWindow", "Use hypnogram to improve detection")) + self._ToolKCProbTh.setToolTip(_translate("MainWindow", "Number of standard deviations of the wavelet envelope")) + self.label_62.setText(_translate("MainWindow", "Tmin / Tmax")) + self._ToolKCMinDur.setToolTip(_translate("MainWindow", "

Minimum duration of KC (ms)

")) + self._ToolKCMaxDur.setToolTip(_translate("MainWindow", "

Maximum duration of KC (ms)

")) + self.label_71.setText(_translate("MainWindow", "Amp threshold")) + self._ToolMTTh.setToolTip(_translate("MainWindow", "

Number of standard deviation of the derivative signal

")) + self.label_93.setText(_translate("MainWindow", "Threshold")) + self._ToolMTOnly.setText(_translate("MainWindow", "Perform detection only for REM sleep")) self.label_94.setText(_translate("MainWindow", "Muscle\n" -"Twitches", None)) +"Twitches")) item = self._ToolDetectTable.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Number", None)) + item.setText(_translate("MainWindow", "Number")) item = self._ToolDetectTable.horizontalHeaderItem(1) - item.setText(_translate("MainWindow", "Density ( / min )", None)) - self._ToolDetectApply.setToolTip(_translate("MainWindow", "

Apply detection either on :

- Selected channels via the channel selection box above

- Visible channels

- All channels

", None)) - self._ToolDetectApply.setText(_translate("MainWindow", "Apply", None)) - self._DetectionTab.setTabText(self._DetectionTab.indexOf(self.q_DetectSettings), _translate("MainWindow", "Settings", None)) - self._DetectSelect.setText(_translate("MainWindow", "Select", None)) - self._DetectRm.setText(_translate("MainWindow", "Remove", None)) - self._DetectViz.setText(_translate("MainWindow", "Visible", None)) - self._DetectTypes.setToolTip(_translate("MainWindow", "

Select the detection type on this channel

", None)) - self._DetectChans.setToolTip(_translate("MainWindow", "

Select the channel

", None)) - self.label_72.setText(_translate("MainWindow", "Selection", None)) - self._DetectExportAll.setToolTip(_translate("MainWindow", "

Export all detections in a NumPy compatible format (.npy)

", None)) - self._DetectExportAll.setText(_translate("MainWindow", "Export all", None)) - self._DetectImportAll.setToolTip(_translate("MainWindow", "

Import all detections in a NumPy compatible format (.npy)

", None)) - self._DetectImportAll.setText(_translate("MainWindow", "Import all", None)) - self.label_73.setText(_translate("MainWindow", "Export / import", None)) + item.setText(_translate("MainWindow", "Density ( / min )")) + self._ToolDetectApply.setToolTip(_translate("MainWindow", "

Apply detection either on :

- Selected channels via the channel selection box above

- Visible channels

- All channels

")) + self._ToolDetectApply.setText(_translate("MainWindow", "Apply")) + self._DetectionTab.setTabText(self._DetectionTab.indexOf(self.q_DetectSettings), _translate("MainWindow", "Settings")) self._DetectLocations.setSortingEnabled(True) item = self._DetectLocations.horizontalHeaderItem(0) - item.setText(_translate("MainWindow", "Start (seconds)", None)) + item.setText(_translate("MainWindow", "Start (seconds)")) item = self._DetectLocations.horizontalHeaderItem(1) - item.setText(_translate("MainWindow", "Duration (ms)", None)) + item.setText(_translate("MainWindow", "Duration (ms)")) item = self._DetectLocations.horizontalHeaderItem(2) - item.setText(_translate("MainWindow", "Stage", None)) - self.label_48.setText(_translate("MainWindow", "Export table", None)) - self._DetectLocExport.setText(_translate("MainWindow", "Export", None)) - self._DetectLocExportAs.setItemText(0, _translate("MainWindow", "CSV file (*.csv)", None)) - self._DetectLocExportAs.setItemText(1, _translate("MainWindow", "TXT file (*.txt)", None)) - self._DetectLocImport.setText(_translate("MainWindow", "Import", None)) - self._DetectionTab.setTabText(self._DetectionTab.indexOf(self.q_DetectLoc), _translate("MainWindow", "Locations", None)) - self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Detection), _translate("MainWindow", "Detection", None)) - self.label_12.setText(_translate("MainWindow", "sec", None)) - self.label_6.setText(_translate("MainWindow", "sec", None)) - self.label_4.setText(_translate("MainWindow", "sec", None)) - self._slGrid.setText(_translate("MainWindow", "Grid", None)) - self._slRules.setItemText(0, _translate("MainWindow", "seconds", None)) - self._slRules.setItemText(1, _translate("MainWindow", "minutes", None)) - self._slRules.setItemText(2, _translate("MainWindow", "hours", None)) - self.label.setText(_translate("MainWindow", "Go to", None)) - self.label_5.setText(_translate("MainWindow", "Slider step", None)) - self.label_31.setText(_translate("MainWindow", "Rule", None)) - self.label_3.setText(_translate("MainWindow", "Window", None)) - self._slMagnify.setText(_translate("MainWindow", "Magnify", None)) - self._SlText.setText(_translate("MainWindow", "TextLabel", None)) - self._slAbsTime.setText(_translate("MainWindow", "Absolute time", None)) - self.menuFiles.setTitle(_translate("MainWindow", "Files", None)) - self.menuSave.setTitle(_translate("MainWindow", "Save", None)) - self.menuLoad.setTitle(_translate("MainWindow", "Load", None)) - self.menuDisplay.setTitle(_translate("MainWindow", "Display", None)) - self.menuHelp.setTitle(_translate("MainWindow", "Help", None)) - self.actionSave.setText(_translate("MainWindow", "Save", None)) - self.actionLoad.setText(_translate("MainWindow", "Load", None)) - self.actionCortical_repartition.setText(_translate("MainWindow", "Cortical repartition", None)) - self.actionCortical.setText(_translate("MainWindow", "Cortical", None)) - self.actionSagittal.setText(_translate("MainWindow", "Sagittal", None)) - self.actionAxial.setText(_translate("MainWindow", "Axial", None)) - self.actionCamera.setText(_translate("MainWindow", "Camera", None)) - self.actionLeft.setText(_translate("MainWindow", "Left", None)) - self.actionRight.setText(_translate("MainWindow", "Right", None)) - self.actionQuick_settings.setText(_translate("MainWindow", "Quick settings", None)) - self.actionQuick_settings.setShortcut(_translate("MainWindow", "Ctrl+D", None)) - self.actionClose.setText(_translate("MainWindow", "Close", None)) - self.actionClose.setShortcut(_translate("MainWindow", "Ctrl+Q", None)) - self.actionProjection.setText(_translate("MainWindow", "Projection", None)) - self.actionProjection.setToolTip(_translate("MainWindow", "

Find all vertices under a distance of t_radius with each source and project s_data to the surface

", None)) - self.actionProjection.setShortcut(_translate("MainWindow", "Ctrl+P", None)) - self.actionRepartition.setText(_translate("MainWindow", "Repartition", None)) - self.actionRepartition.setShortcut(_translate("MainWindow", "Ctrl+R", None)) - self.actionShortcuts.setText(_translate("MainWindow", "Shortcuts", None)) - self.actionShortcuts.setShortcut(_translate("MainWindow", "Ctrl+T", None)) - self.actionUi_settings.setText(_translate("MainWindow", "Ui settings", None)) - self.actionNdPlt.setText(_translate("MainWindow", "Nd-plot", None)) - self.actionOnedPlt.setText(_translate("MainWindow", "1d-plot", None)) - self.actionImage.setText(_translate("MainWindow", "Image", None)) - self.actionColormap.setText(_translate("MainWindow", "Colormap", None)) - self.actionShortcut.setText(_translate("MainWindow", "Shortcuts", None)) - self.actionShortcut.setShortcut(_translate("MainWindow", "Ctrl+T", None)) - self.actionDocumentation.setText(_translate("MainWindow", "Documentation", None)) - self.actionDocumentation.setShortcut(_translate("MainWindow", "Ctrl+E", None)) - self.actionScreenshot.setText(_translate("MainWindow", "Screenshot", None)) - self.actionScreenshot.setShortcut(_translate("MainWindow", "Ctrl+N", None)) - self.actionSave_hypnogram.setText(_translate("MainWindow", "Save hypnogram data", None)) - self.actionSave_infos.setText(_translate("MainWindow", "Save infos table", None)) - self.actionSave_scoring.setText(_translate("MainWindow", "Save scoring table", None)) - self.actionSave_detection.setText(_translate("MainWindow", "Save detection table", None)) - self.actionSave_all.setText(_translate("MainWindow", "Save all", None)) - self.actionExit.setText(_translate("MainWindow", "Exit", None)) - self.actionExit.setShortcut(_translate("MainWindow", "Ctrl+Q", None)) - self.actionLoad_hypnogram.setText(_translate("MainWindow", "Load hypnogram", None)) - self.actionHypnogram_data.setText(_translate("MainWindow", "Hypnogram data", None)) - self.actionHypnogram_data.setShortcut(_translate("MainWindow", "Ctrl+S", None)) - self.actionInfo_table.setText(_translate("MainWindow", "Info table", None)) - self.actionScoring_table.setText(_translate("MainWindow", "Scoring table", None)) - self.actionDetection_table.setText(_translate("MainWindow", "Detection table", None)) - self.actionAll.setText(_translate("MainWindow", "All", None)) - self.actionAll.setShortcut(_translate("MainWindow", "Ctrl+S", None)) - self.actionHypnogram.setText(_translate("MainWindow", "Hypnogram", None)) - self.actionData.setText(_translate("MainWindow", "Data", None)) - self.actionHypnogram_figure.setText(_translate("MainWindow", "Hypnogram figure", None)) - self.actionLoadConfig.setText(_translate("MainWindow", "Config file", None)) - self.actionSaveConfig.setText(_translate("MainWindow", "Config file", None)) - self.actionDownload_pdf_doc.setText(_translate("MainWindow", "Download pdf doc", None)) + item.setText(_translate("MainWindow", "Stage")) + self._DetectSelect.setText(_translate("MainWindow", "Select")) + self._DetectRm.setText(_translate("MainWindow", "Remove")) + self._DetectViz.setText(_translate("MainWindow", "Visible")) + self._DetectTypes.setToolTip(_translate("MainWindow", "

Select the detection type on this channel

")) + self._DetectChans.setToolTip(_translate("MainWindow", "

Select the channel

")) + self.label_72.setText(_translate("MainWindow", "Selection")) + self._DetectionTab.setTabText(self._DetectionTab.indexOf(self.q_DetectLoc), _translate("MainWindow", "Locations")) + self.QuickSettings.setTabText(self.QuickSettings.indexOf(self.q_Detection), _translate("MainWindow", "Detection")) + self.label_12.setText(_translate("MainWindow", "sec")) + self.label_6.setText(_translate("MainWindow", "sec")) + self.label_4.setText(_translate("MainWindow", "sec")) + self._slGrid.setText(_translate("MainWindow", "Grid")) + self._slRules.setItemText(0, _translate("MainWindow", "seconds")) + self._slRules.setItemText(1, _translate("MainWindow", "minutes")) + self._slRules.setItemText(2, _translate("MainWindow", "hours")) + self.label.setText(_translate("MainWindow", "Go to")) + self.label_5.setText(_translate("MainWindow", "Slider step")) + self.label_31.setText(_translate("MainWindow", "Rule")) + self.label_3.setText(_translate("MainWindow", "Window")) + self._slMagnify.setText(_translate("MainWindow", "Magnify")) + self._SlText.setText(_translate("MainWindow", "TextLabel")) + self._slAbsTime.setText(_translate("MainWindow", "Absolute time")) + self.menuFiles.setTitle(_translate("MainWindow", "Files")) + self.menuSave.setTitle(_translate("MainWindow", "Save")) + self.menuSaveHypnogram.setTitle(_translate("MainWindow", "Hypnogram")) + self.menuSaveDetections.setTitle(_translate("MainWindow", "Detection")) + self.menuSaveScreenshot.setTitle(_translate("MainWindow", "Screenshot")) + self.menuLoad.setTitle(_translate("MainWindow", "Load")) + self.menuLoadDetections.setTitle(_translate("MainWindow", "Detections")) + self.menuDisplay.setTitle(_translate("MainWindow", "Display")) + self.menuHelp.setTitle(_translate("MainWindow", "Help")) + self.menuSettings.setTitle(_translate("MainWindow", "Settings")) + self.actionSave.setText(_translate("MainWindow", "Save")) + self.actionLoad.setText(_translate("MainWindow", "Load")) + self.actionCortical_repartition.setText(_translate("MainWindow", "Cortical repartition")) + self.actionCortical.setText(_translate("MainWindow", "Cortical")) + self.actionSagittal.setText(_translate("MainWindow", "Sagittal")) + self.actionAxial.setText(_translate("MainWindow", "Axial")) + self.actionCamera.setText(_translate("MainWindow", "Camera")) + self.actionLeft.setText(_translate("MainWindow", "Left")) + self.actionRight.setText(_translate("MainWindow", "Right")) + self.menuDispSettings.setText(_translate("MainWindow", "Quick settings")) + self.menuDispSettings.setShortcut(_translate("MainWindow", "Ctrl+D")) + self.actionClose.setText(_translate("MainWindow", "Close")) + self.actionClose.setShortcut(_translate("MainWindow", "Ctrl+Q")) + self.actionProjection.setText(_translate("MainWindow", "Projection")) + self.actionProjection.setToolTip(_translate("MainWindow", "

Find all vertices under a distance of t_radius with each source and project s_data to the surface

")) + self.actionProjection.setShortcut(_translate("MainWindow", "Ctrl+P")) + self.actionRepartition.setText(_translate("MainWindow", "Repartition")) + self.actionRepartition.setShortcut(_translate("MainWindow", "Ctrl+R")) + self.actionShortcuts.setText(_translate("MainWindow", "Shortcuts")) + self.actionShortcuts.setShortcut(_translate("MainWindow", "Ctrl+T")) + self.actionUi_settings.setText(_translate("MainWindow", "Ui settings")) + self.actionNdPlt.setText(_translate("MainWindow", "Nd-plot")) + self.actionOnedPlt.setText(_translate("MainWindow", "1d-plot")) + self.actionImage.setText(_translate("MainWindow", "Image")) + self.actionColormap.setText(_translate("MainWindow", "Colormap")) + self.menuShortcut.setText(_translate("MainWindow", "Shortcuts")) + self.menuShortcut.setShortcut(_translate("MainWindow", "Ctrl+T")) + self.menuDocumentation.setText(_translate("MainWindow", "Documentation")) + self.menuDocumentation.setShortcut(_translate("MainWindow", "Ctrl+E")) + self.actionScreenshot.setText(_translate("MainWindow", "Screenshot")) + self.actionScreenshot.setShortcut(_translate("MainWindow", "Ctrl+N")) + self.actionSave_hypnogram.setText(_translate("MainWindow", "Save hypnogram data")) + self.actionSave_infos.setText(_translate("MainWindow", "Save infos table")) + self.actionSave_scoring.setText(_translate("MainWindow", "Save scoring table")) + self.actionSave_detection.setText(_translate("MainWindow", "Save detection table")) + self.actionSave_all.setText(_translate("MainWindow", "Save all")) + self.menuExit.setText(_translate("MainWindow", "Exit")) + self.menuExit.setShortcut(_translate("MainWindow", "Ctrl+Q")) + self.actionLoad_hypnogram.setText(_translate("MainWindow", "Load hypnogram")) + self.menuSaveInfoTable.setText(_translate("MainWindow", "Stats info table")) + self.menuSaveScoringTable.setText(_translate("MainWindow", "Scoring table")) + self.actionAll.setText(_translate("MainWindow", "All")) + self.actionAll.setShortcut(_translate("MainWindow", "Ctrl+S")) + self.menuLoadHypno.setText(_translate("MainWindow", "Hypnogram")) + self.menuLoadData.setText(_translate("MainWindow", "Data")) + self.actionHypnogram_figure.setText(_translate("MainWindow", "Hypnogram figure")) + self.menuLoadConfig.setText(_translate("MainWindow", "Sleep GUI config")) + self.menuSaveConfig.setText(_translate("MainWindow", "Sleep GUI config")) + self.menuDownload_pdf_doc.setText(_translate("MainWindow", "Download pdf doc")) + self.menuSaveHypnogramFigure.setText(_translate("MainWindow", "Figure")) + self.menuSaveHypnogramData.setText(_translate("MainWindow", "Data")) + self.menuSaveDetectAll.setText(_translate("MainWindow", "All detections")) + self.menuSaveDetectSelected.setText(_translate("MainWindow", "Selected detection")) + self.menuSaveScreenshotEntire.setText(_translate("MainWindow", "Entire window")) + self.menuSaveScreenshotSelected.setText(_translate("MainWindow", "Selected canvas")) + self.menuLoadDetectAll.setText(_translate("MainWindow", "All")) + self.menuLoadDetectSelect.setText(_translate("MainWindow", "Selected")) + self.menuDispSpec.setText(_translate("MainWindow", "Spectrogram")) + self.menuDispSpec.setShortcut(_translate("MainWindow", "S")) + self.menuDispHypno.setText(_translate("MainWindow", "Hypnogram")) + self.menuDispHypno.setShortcut(_translate("MainWindow", "H")) + self.menuDispNavbar.setText(_translate("MainWindow", "Navigation bar")) + self.menuDispNavbar.setShortcut(_translate("MainWindow", "P")) + self.menuDispTimeax.setText(_translate("MainWindow", "Time axis")) + self.menuDispTimeax.setShortcut(_translate("MainWindow", "X")) + self.menuDispTopo.setText(_translate("MainWindow", "Topoplot")) + self.menuDispTopo.setShortcut(_translate("MainWindow", "T")) + self.menuDispIndic.setText(_translate("MainWindow", "Time indicators")) + self.menuDispIndic.setShortcut(_translate("MainWindow", "I")) + self.actionZoom_mode.setText(_translate("MainWindow", "Zoom mode")) + self.actionZoom_mode.setShortcut(_translate("MainWindow", "Z")) + self.menuDispZoom.setText(_translate("MainWindow", "Zoom mode")) + self.menuDispZoom.setShortcut(_translate("MainWindow", "Z")) + self.menuSettingCleanHyp.setText(_translate("MainWindow", "Clean hypnogram")) + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + MainWindow = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(MainWindow) + MainWindow.show() + sys.exit(app.exec_()) diff --git a/visbrain/sleep/interface/gui/sleep_gui.ui b/visbrain/sleep/interface/gui/sleep_gui.ui index 7ee6d0b3e..b4925775a 100644 --- a/visbrain/sleep/interface/gui/sleep_gui.ui +++ b/visbrain/sleep/interface/gui/sleep_gui.ui @@ -2,6 +2,9 @@ MainWindow + + Qt::NonModal + true @@ -75,7 +78,7 @@ QTabWidget::Rounded - 1 + 0 true @@ -85,52 +88,21 @@ Panels - - - - QFrame::Panel - - - QFrame::Raised - - - - 3 - - - 3 - - - - - - true - - - - Manage visible channels, amplitude, -spectrogram, hypnogram and the time axis - - - Qt::AlignCenter - - - - - - + + true + - 1 + 0 0 0 - 349 - 301 + 377 + 907 @@ -187,8 +159,8 @@ spectrogram, hypnogram and the time axis 0 0 - 321 - 70 + 349 + 661 @@ -409,534 +381,348 @@ spectrogram, hypnogram and the time axis 0 0 - 410 - 860 + 377 + 907 - Spectrogram // Hypnogram // Time axis + Spectrogram - - - Spectrogram + + + + 0 + 50 + - - - 0 - - + + 0 - - - Qt::Horizontal + + + 9 - - - - - - + + - <html><head/><body><p>Display / hide the spectrogram</p></body></html> + <html><head/><body><p>Starting frequency for the spectrogram</p></body></html> - - Visible + + 1 - - true + + 0.500000000000000 + + + 190.000000000000000 - - + + - <html><head/><body><p>Display / hide the time window indicator</p></body></html> + <html><head/><body><p>Ending frequency for the spectrogram</p></body></html> + + + 1 + + + 0.100000000000000 + + + 200.000000000000000 + + 20.000000000000000 + + + + + - Indicator + f end - - true + + + + + + Overlap - - + + + + f start + + + + + - <html><head/><body><p>Zoom over the spectrogram</p></body></html> + <html><head/><body><p>Change the contrast of the spectrogram</p></body></html> + + + 1 + + + 0.000000000000000 + + + 1.000000000000000 + + 0.100000000000000 + + + 0.500000000000000 + + + + + - Zoom + Contraste - - - - - - - 0 - - - 0 - - - - - 9 - - - - - <html><head/><body><p>Ending frequency for the spectrogram</p></body></html> - - - 1 - - - 0.100000000000000 - - - 200.000000000000000 - - - 20.000000000000000 - - - - - - - f end - - - - - - - Overlap - - - - - - - f start - - - - - - - <html><head/><body><p>Change the contrast of the spectrogram</p></body></html> - - - 1 - - - 0.000000000000000 - - - 1.000000000000000 - - - 0.100000000000000 - - - 0.500000000000000 - - - - - - - Contraste - - - - - - - Channel - - - - - - - <html><head/><body><p>Overlap between each consecutive windows.</p></body></html> - - - 1 - - - 0.000000000000000 - - - - - - - <html><head/><body><p>Length of each time window for computing the spectrogram</p></body></html> - - - 1 - - - 0.100000000000000 - - - 1000.000000000000000 - - - 30.000000000000000 - - - - - - - <html><head/><body><p>Starting frequency for the spectrogram</p></body></html> - - - 1 - - - 0.500000000000000 - - - 190.000000000000000 - - - - - - - Length - - - - - - - sec - - - - - - - <html><head/><body><p>Colormap for the spectrogram</p></body></html> - - - - - - - - 10 - 0 - - - - Qt::Vertical - - - - - - - - true - - - - Settings - - - - - - - - true - - - - Apply -on - - - - - - - sec - - - - - - - - 10 - 0 - - - - Qt::Vertical - - - - - - - - 0 - 0 - - - - - 0 - - - 3 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - <html><head/><body><p>Compute the spectrogram on the selected channel and using the time length, overlap, [fstart, fend], colormap and contrast.</p></body></html> - - - Apply - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - <html><head/><body><p>Select to channel used for the spectrogram</p></body></html> - - - - - - - Reversed - - - - - - - - 10 - 0 - - - - Qt::Vertical - - - - - - - - true - - - - Colormap - - - - - - - - - - - - - - - Hypnogram - - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - - - - + + + + Channel + + + + + - <html><head/><body><p>Display / hide the hypnogram</p></body></html> + <html><head/><body><p>Overlap between each consecutive windows.</p></body></html> + + + 1 + + 0.000000000000000 + + + + + + + <html><head/><body><p>Length of each time window for computing the spectrogram</p></body></html> + + + 1 + + + 0.100000000000000 + + + 1000.000000000000000 + + + 30.000000000000000 + + + + + - Visible + Length - - true + + + + + + sec - - + + - <html><head/><body><p>Display / hide the time window indicator</p></body></html> + <html><head/><body><p>Colormap for the spectrogram</p></body></html> + + + + + + + + 10 + 0 + + + + Qt::Vertical + + + + + + + + true + - Indicator + Settings - - true + + + + + + + true + + + + Apply +on + + + + + + + sec + + + + + + + + 10 + 0 + + + + Qt::Vertical - - + + + + + 0 + 0 + + + + + 0 + + + 3 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + <html><head/><body><p>Compute the spectrogram on the selected channel and using the time length, overlap, [fstart, fend], colormap and contrast.</p></body></html> + + + Apply + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + - <html><head/><body><p>Zoom over the hypnogram</p></body></html> - - - Zoom + <html><head/><body><p>Select to channel used for the spectrogram</p></body></html> - - - - - - - - - Time axis - - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - - - - 0 - - - - - <html><head/><body><p>Display / hide the time window indicator</p></body></html> - + + - Indicator - - - true + Reversed - - - - <html><head/><body><p>Display / hide the time axis</p></body></html> - - - Visible + + + + + 10 + 0 + - - true + + Qt::Vertical - - - - <html><head/><body><p>Zoom over the time axis</p></body></html> + + + + + true + - Zoom + Colormap - - - - Qt::Vertical - - - - 20 - 40 - - - - + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -944,21 +730,14 @@ on 0 0 - 300 - 265 + 377 + 907 Topoplot - - - - Visible - - - @@ -1289,40 +1068,6 @@ on Tools - - - - QFrame::Panel - - - QFrame::Raised - - - - 3 - - - 3 - - - - - - true - - - - Set of signal processing tools (remove the mean and -trend, filtering) - - - Qt::AlignCenter - - - - - - @@ -1336,8 +1081,8 @@ trend, filtering) 0 0 - 410 - 891 + 377 + 938 @@ -1569,7 +1314,7 @@ re-referenced 0 0 - 390 + 357 998 @@ -1657,8 +1402,8 @@ re-referenced 0 0 - 410 - 891 + 337 + 396 @@ -2100,40 +1845,6 @@ re-referenced Infos - - - - QFrame::Panel - - - QFrame::Raised - - - - 3 - - - 3 - - - - - - true - - - - Get and export usefull informations about the -hypnogram. Those informations change while editing it. - - - Qt::AlignCenter - - - - - - @@ -2166,13 +1877,6 @@ hypnogram. Those informations change while editing it. - - - - Export - - - @@ -2193,20 +1897,6 @@ hypnogram. Those informations change while editing it. - - - - - CSV file (*.csv) - - - - - Text file (*.txt) - - - - @@ -2220,13 +1910,6 @@ hypnogram. Those informations change while editing it. - - - - Export as - - - @@ -2249,40 +1932,6 @@ hypnogram. Those informations change while editing it. Scoring - - - - QFrame::Panel - - - QFrame::Raised - - - - 3 - - - 3 - - - - - - true - - - - Score the hypnogram by manually adding / removing - lines. Alternatively, you can directly edit it from the grah. - - - Qt::AlignCenter - - - - - - @@ -2377,54 +2026,6 @@ hypnogram. Those informations change while editing it. - - - - 0 - - - - - - CSV file (*.csv) - - - - - Text file (*.txt) - - - - - - - - Export as: - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Export - - - - - @@ -2432,49 +2033,6 @@ hypnogram. Those informations change while editing it. Detection - - - - QFrame::Panel - - - QFrame::Raised - - - - 3 - - - 0 - - - 3 - - - 0 - - - 0 - - - - - - true - - - - Perform automatic detection of several sleep microstructural features either on -selected, visible or all channels. - - - Qt::AlignCenter - - - - - - @@ -3583,13 +3141,44 @@ Twitches - - - - - Locations - - + + + + + Locations + + + + + + QAbstractItemView::NoEditTriggers + + + true + + + true + + + true + + + + Start (seconds) + + + + + Duration (ms) + + + + + Stage + + + + @@ -3640,6 +3229,19 @@ Twitches + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -3697,26 +3299,6 @@ Twitches 0 - - - - <html><head/><body><p>Export all detections in a NumPy compatible format (.npy)</p></body></html> - - - Export all - - - - - - - <html><head/><body><p>Import all detections in a NumPy compatible format (.npy)</p></body></html> - - - Import all - - - @@ -3733,121 +3315,6 @@ Twitches - - - - - true - - - - Export / import - - - - - - - - - QAbstractItemView::NoEditTriggers - - - true - - - true - - - true - - - - Start (seconds) - - - - - Duration (ms) - - - - - Stage - - - - - - - - 0 - - - - - - 10 - 0 - - - - Qt::Vertical - - - - - - - - 0 - 0 - - - - - true - - - - Export table - - - - - - - Export - - - - - - - - 0 - 0 - - - - - CSV file (*.csv) - - - - - TXT file (*.txt) - - - - - - - - Import - - - @@ -4224,44 +3691,88 @@ Twitches Save - - - - - - + + + Hypnogram + + + + + + + false + + + Detection + + + + + + + Screenshot + + + + + + + + + + Load - - - + + + Detections + + + + + + + + - - - + Display - + + + + + + + + Help - - - + + + + + + + Settings + + + @@ -4310,7 +3821,7 @@ Twitches Right - + true @@ -4405,7 +3916,7 @@ Twitches Colormap - + Shortcuts @@ -4413,7 +3924,7 @@ Twitches Ctrl+T - + Documentation @@ -4454,7 +3965,7 @@ Twitches Save all - + Exit @@ -4467,65 +3978,206 @@ Twitches Load hypnogram - + + + Stats info table + + + + + Scoring table + + + - Hypnogram data + All Ctrl+S - + - Info table + Hypnogram - + + + false + - Scoring table + Data - + - Detection table + Hypnogram figure - + + + Sleep GUI config + + + + + Sleep GUI config + + + + + Download pdf doc + + + + + Figure + + + + + Data + + + + + All detections + + + + + Selected detection + + + + + Entire window + + + + + false + + + Selected canvas + + + All + + + + Selected + + + + + true + + + true + + + Spectrogram + - Ctrl+S + S - + + + true + + + true + Hypnogram + + H + - + + + true + + + true + - Data + Navigation bar + + + P - + + + true + + + true + - Hypnogram figure + Time axis + + + X + + + + + true + + + Topoplot + + + T + + + + + true + + + true + + + Time indicators + + + I - + + + true + - Config file + Zoom mode + + + Z - + + + true + - Config file + Zoom mode + + + Z - + - Download pdf doc + Clean hypnogram diff --git a/visbrain/sleep/interface/uiElements/uiDetection.py b/visbrain/sleep/interface/uiElements/uiDetection.py index 36ea63795..91a5b1e6a 100644 --- a/visbrain/sleep/interface/uiElements/uiDetection.py +++ b/visbrain/sleep/interface/uiElements/uiDetection.py @@ -2,12 +2,12 @@ import numpy as np import os from warnings import warn +from PyQt5 import QtWidgets from ....utils import (remdetect, spindlesdetect, slowwavedetect, kcdetect, - peakdetect, mtdetect, listToCsv, listToTxt) + peakdetect, mtdetect) from ....utils.sleep.event import _events_duration - -from PyQt4 import QtGui +from ....io import dialogLoad, dialogSave, write_csv, write_txt __all__ = ['uiDetection'] @@ -42,12 +42,6 @@ def __init__(self): self._DetectLocations.itemSelectionChanged.connect( self._fcn_gotoLocation) - # Export file : - self._DetectLocExport.clicked.connect(self._fcn_exportLocation) - self._DetectLocImport.clicked.connect(self._fcn_importLocation) - self._DetectExportAll.clicked.connect(self._fcn_exportAllDetections) - self._DetectImportAll.clicked.connect(self._fcn_importAllDetections) - # ===================================================================== # ENABLE / DISABLE GUI COMPONENTS (based on selected channels) # ===================================================================== @@ -180,6 +174,9 @@ def _fcn_applyDetection(self): # Update index for this channel and detection : self._detect.dict[(self._channels[k], method)]['index'] = index + # Activate the save detections menu : + self._CheckDetectMenu() + if index.size: # Be sure panel is displayed : if not self.canvas_isVisible(k): @@ -198,9 +195,9 @@ def _fcn_applyDetection(self): if index.size: # Report results on table : self._ToolDetectTable.setRowCount(1) - self._ToolDetectTable.setItem(0, 0, QtGui.QTableWidgetItem( + self._ToolDetectTable.setItem(0, 0, QtWidgets.QTableWidgetItem( str(nb))) - self._ToolDetectTable.setItem(0, 1, QtGui.QTableWidgetItem( + self._ToolDetectTable.setItem(0, 1, QtWidgets.QTableWidgetItem( str(round(dty, 2)))) else: warn("\nNo " + method + " detected on channel " + self._channels[ @@ -243,11 +240,11 @@ def __getVisibleLoc(self): tps = str(self._DetectTypes.currentText()) if chan and tps: if tps == 'Peaks': - self._DetectViz.setChecked(self._detect.peaks[(chan, - tps)].visible) + viz = self._detect.peaks[(chan, tps)].visible else: - self._DetectViz.setChecked(self._detect.line[(chan, - tps)].visible) + viz = self._detect.line[(chan, tps)].visible + self._DetectViz.setChecked(viz) + self._DetectLocations.setEnabled(viz) def _fcn_rmLocation(self): """Demove a detection.""" @@ -260,8 +257,11 @@ def _fcn_rmLocation(self): # Remove vertical indicators : pos = np.full((1, 3), -10., dtype=np.float32) self._chan.loc[self._channels.index(chan)].set_data(pos=pos) + # Clean table : + self._DetectLocations.setRowCount(0) # Update GUI : self._locLineReport() + self._CheckDetectMenu() def _fcn_vizLocation(self): """Set visible detection.""" @@ -273,6 +273,7 @@ def _fcn_vizLocation(self): viz = self._DetectViz.isChecked() self._detect.visible(viz, chan, types) self._chan.loc[self._channels.index(chan)].visible = viz + self._DetectLocations.setEnabled(viz) def _fcn_runSwitchLocation(self): """Run switch location channel and type.""" @@ -310,13 +311,13 @@ def _fcn_fillLocations(self, channel, kind, index, duration): # Fill the table : for num, (k, i) in enumerate(zip(staInd, duration)): # Starting : - self._DetectLocations.setItem(num, 0, QtGui.QTableWidgetItem( + self._DetectLocations.setItem(num, 0, QtWidgets.QTableWidgetItem( str(self._time[k]))) # Duration : - self._DetectLocations.setItem(num, 1, QtGui.QTableWidgetItem( + self._DetectLocations.setItem(num, 1, QtWidgets.QTableWidgetItem( str(i))) # Type : - self._DetectLocations.setItem(num, 2, QtGui.QTableWidgetItem( + self._DetectLocations.setItem(num, 2, QtWidgets.QTableWidgetItem( ref[int(self._hypno[k])])) self._DetectLocations.selectRow(0) @@ -341,89 +342,3 @@ def _fcn_gotoLocation(self): self._SlGoto.setValue(goto) # Set vertical lines to the location : self._chan.set_location(self._sf, self._data[ix, :], ix, sta, end) - - # ===================================================================== - # EXPORT IMPORT TABLE - # ===================================================================== - def _fcn_exportLocation(self): - """Export locations info.""" - channel = self._currentLoc[0] - method = self._currentLoc[1] - # Read Table - rowCount = self._DetectLocations.rowCount() - staInd = [channel, '', 'Time index (s)'] - duration = [method, '', 'Duration (s)'] - stage = ['', '', 'Sleep stage'] - for row in np.arange(rowCount): - staInd.append(str(self._DetectLocations.item(row, 0).text())) - duration.append(str(self._DetectLocations.item(row, 1).text())) - stage.append(str(self._DetectLocations.item(row, 2).text())) - # Find extension : - selected_ext = str(self._DetectLocExportAs.currentText()) - # Get file name : - path = QtGui.QFileDialog.getSaveFileName( - self, "Save File", method + "_locinfo", - filter=selected_ext) - path = str(path) # py2 - if path: - file = os.path.splitext(str(path))[0] - file += '_' + channel + '-' + method - if selected_ext.find('csv') + 1: - listToCsv(file + '.csv', zip(staInd, duration, stage)) - elif selected_ext.find('txt') + 1: - listToTxt(file + '.txt', zip(staInd, duration, stage)) - - def _fcn_importLocation(self): - """Import location table.""" - # Get file name : - file = QtGui.QFileDialog.getOpenFileName( - self, "Import table", "", "CSV file (*.csv);;Text file (*.txt);;" - "All files (*.*)") - file = str(file) - # Get channel / method from file name : - (chan, meth) = file.split('_')[-1].split('.')[0].split('-') - # Load the file : - (st, dur) = np.genfromtxt(file, delimiter=',')[3::, 0:2].T - # Sort by starting index : - idxsort = np.argsort(st) - st, dur = st[idxsort], dur[idxsort] - # Convert into index : - stInd = np.round(st * self._sf).astype(int) - durInd = np.round(dur * self._sf / 1000.).astype(int) - # Build the index array : - index = np.array([]) - for k, i in zip(stInd, durInd): - index = np.append(index, np.arange(k, k+i)) - index = index.astype(np.int, copy=False) - # Set index : - self._detect[(chan, meth)]['index'] = index - # Plot update : - self._fcn_sliderMove() - self._locLineReport() - - def _fcn_exportAllDetections(self): - """Export all locations.""" - # Get file name : - path = QtGui.QFileDialog.getSaveFileName( - self, "Save all detections", filter='.npy') - path = str(path) # py2 - if path: - file = os.path.splitext(str(path))[0] - np.save(file + '.npy', self._detect.dict) - - def _fcn_importAllDetections(self): - """Import detections.""" - # Dialog window for detection file : - file = QtGui.QFileDialog.getOpenFileName( - self, "Import detections", "", "NumPy (*.npy)") - self._detect.dict = np.ndarray.tolist(np.load(file)) - # Made canvas visbles : - for k in self._detect: - if self._detect[k]['index'].size: - # Get channel number : - idx = self._channels.index(k[0]) - self.canvas_setVisible(idx, True) - self._chan.visible[idx] = True - # Plot update : - self._fcn_sliderMove() - self._locLineReport() diff --git a/visbrain/sleep/interface/uiElements/uiElements.py b/visbrain/sleep/interface/uiElements/uiElements.py index 3bfc86fd9..b069176bf 100644 --- a/visbrain/sleep/interface/uiElements/uiElements.py +++ b/visbrain/sleep/interface/uiElements/uiElements.py @@ -6,12 +6,13 @@ from .uiTools import uiTools from .uiScoring import uiScoring from .uiDetection import uiDetection +from .uiMenu import uiMenu __all__ = ['uiElements'] class uiElements(uiSettings, uiPanels, uiInfo, uiTools, uiScoring, - uiDetection): + uiDetection, uiMenu): """Inherit from the diffrent ui files and initialize them.""" def __init__(self): @@ -22,3 +23,4 @@ def __init__(self): uiTools.__init__(self) uiScoring.__init__(self) uiDetection.__init__(self) + uiMenu.__init__(self) diff --git a/visbrain/sleep/interface/uiElements/uiInfo.py b/visbrain/sleep/interface/uiElements/uiInfo.py index 42aa832ba..586c6fd7c 100644 --- a/visbrain/sleep/interface/uiElements/uiInfo.py +++ b/visbrain/sleep/interface/uiElements/uiInfo.py @@ -1,9 +1,8 @@ """Main class for info managment.""" -from PyQt4 import QtGui -import os +from PyQt5 import QtWidgets -from ....utils import sleepstats, listToCsv, listToTxt +from ....utils import sleepstats __all__ = ['uiInfo'] @@ -16,8 +15,6 @@ def __init__(self): # Time window changed : self._infoTime.valueChanged.connect(self._fcn_infoUpdate) self._infoTime.setKeyboardTracking(False) - # Export file : - self._infoExport.clicked.connect(self._fcn_exportInfos) def _fcn_infoUpdate(self): """Complete the table sleep info.""" @@ -35,25 +32,9 @@ def _fcn_infoUpdate(self): # Get keys and row : key, r = k.split('_') # Add keys : - self._infoTable.setItem(int(r), 0, QtGui.QTableWidgetItem(key)) + self._infoTable.setItem(int(r), 0, QtWidgets.QTableWidgetItem(key)) # Add values : - self._infoTable.setItem(int(r), 1, QtGui.QTableWidgetItem(str(v))) + self._infoTable.setItem(int(r), 1, QtWidgets.QTableWidgetItem(str(v))) # Remember variables : self._keysInfo[int(r) + 1] = key self._valInfo[int(r) + 1] = str(v) - - def _fcn_exportInfos(self): - """Export stat info.""" - # Find extension : - selected_ext = str(self._infoExportAs.currentText()) - # Get file name : - path = QtGui.QFileDialog.getSaveFileName( - self, "Save File", "statsinfo", - filter=selected_ext) - path = str(path) # py2 - if path: - file = os.path.splitext(str(path))[0] - if selected_ext.find('csv') + 1: - listToCsv(file + '.csv', zip(self._keysInfo, self._valInfo)) - elif selected_ext.find('txt') + 1: - listToTxt(file + '.txt', zip(self._keysInfo, self._valInfo)) diff --git a/visbrain/sleep/interface/uiElements/uiMenu.py b/visbrain/sleep/interface/uiElements/uiMenu.py new file mode 100644 index 000000000..f8cea72f8 --- /dev/null +++ b/visbrain/sleep/interface/uiElements/uiMenu.py @@ -0,0 +1,530 @@ +"""Main class for sleep menus managment.""" + + +import numpy as np +import os +from PyQt5 import QtWidgets +from PyQt5.QtCore import QTimer + +from ....io import (dialogSave, dialogLoad, write_fig_hyp, write_csv, + write_txt, write_hypno_txt, write_hypno_hyp, read_hypno) + +__all__ = ['uiMenu'] + + +class uiMenu(object): + """Main class for sleep menus managment.""" + + def __init__(self): + """Init.""" + # _____________________________________________________________________ + # SAVE + # _____________________________________________________________________ + # Hypnogram : + self.menuSaveHypnogramData.triggered.connect(self.saveHypData) + self.menuSaveHypnogramFigure.triggered.connect(self.saveHypFig) + # Stats info table : + self.menuSaveInfoTable.triggered.connect(self.saveInfoTable) + # Scoring table : + self.menuSaveScoringTable.triggered.connect(self.saveScoringTable) + # Detections : + self.menuSaveDetectAll.triggered.connect(self.saveAllDetect) + self.menuSaveDetectSelected.triggered.connect(self.saveSelectDetect) + # Sleep GUI config : + self.menuSaveConfig.triggered.connect(self.saveConfig) + # Screenshot : + self.menuSaveScreenshotEntire.triggered.connect(self.saveScreenEntire) + + # _____________________________________________________________________ + # LOAD + # _____________________________________________________________________ + # Load hypnogram : + self.menuLoadHypno.triggered.connect(self.loadHypno) + # Sleep GUI config : + self.menuLoadConfig.triggered.connect(self.loadConfig) + # Detections : + self.menuLoadDetectAll.triggered.connect(self.loadDetectAll) + self.menuLoadDetectSelect.triggered.connect(self.loadDetectSelect) + + # _____________________________________________________________________ + # EXIT + # _____________________________________________________________________ + self.menuExit.triggered.connect(QtWidgets.qApp.quit) + + # _____________________________________________________________________ + # DISPLAY + # _____________________________________________________________________ + # Quick settings panel : + self.menuDispSettings.triggered.connect(self._disptog_settings) + self.q_widget.setVisible(True) + # Spectrogram : + self.menuDispSpec.triggered.connect(self._disptog_spec) + # Hypnogram : + self.menuDispHypno.triggered.connect(self._disptog_hyp) + # Time axis : + self.menuDispTimeax.triggered.connect(self._disptog_timeax) + # Navigation bar : + self.menuDispNavbar.triggered.connect(self._disptog_navbar) + # Time indicators : + self.menuDispIndic.triggered.connect(self._disptog_indic) + # Topoplot : + self.menuDispTopo.triggered.connect(self._disptog_topo) + # Zoom : + self.menuDispZoom.triggered.connect(self._disptog_zoom) + + # _____________________________________________________________________ + # SETTINGS + # _____________________________________________________________________ + self.menuSettingCleanHyp.triggered.connect(self.settCleanHyp) + + # _____________________________________________________________________ + # SHORTCUTS & DOC + # _____________________________________________________________________ + self.menuShortcut.triggered.connect(self._fcn_showShortPopup) + self.menuDocumentation.triggered.connect(self._fcn_openDoc) + self.menuDownload_pdf_doc.triggered.connect(self._fcn_downloadDoc) + + ########################################################################### + ########################################################################### + # SAVE + ########################################################################### + ########################################################################### + + # ______________________ HYPNOGRAM ______________________ + def saveHypData(self): + """Save the hypnogram data either in a hyp or txt file.""" + filename = dialogSave(self, 'Save File', 'hypno', "Text file (*.txt);;" + "Elan file (*.hyp);;All files (*.*)") + if filename: + file, ext = os.path.splitext(filename) + + # Switch between differents types : + if ext == '.hyp': + write_hypno_hyp(filename, self._hypno, self._sf, self._sfori, + self._N) + elif ext == '.txt': + write_hypno_txt(filename, self._hypno, self._sf, self._sfori, + self._N, 1) + else: + raise ValueError("Not a valid extension") + + def saveHypFig(self): + """Save a 600 dpi .png figure of the hypnogram.""" + filename = dialogSave(self, 'Save Hypnogram figure', 'hypno', + "PNG (*.png);;All files (*.*)") + if filename: + write_fig_hyp(filename, self._hypno, self._sf, self._toffset) + + # ______________________ STATS INFO TABLE ______________________ + def saveInfoTable(self): + """Export stat info.""" + # Get file name : + path = dialogSave(self, 'Save file', 'statsinfo', + "CSV file (*.csv);;Text file (*.txt);;" + "All files (*.*)") + if path: + file, ext = os.path.splitext(path) + if ext.find('csv') + 1: + write_csv(file + '.csv', zip(self._keysInfo, self._valInfo)) + elif ext.find('txt') + 1: + write_txt(file + '.txt', zip(self._keysInfo, self._valInfo)) + + # ______________________ SCORING TABLE ______________________ + def saveScoringTable(self): + """Export score info.""" + # Read Table + rowCount = self._scoreTable.rowCount() + staInd, endInd, stage = [], [], [] + for row in np.arange(rowCount): + staInd.append(str(self._scoreTable.item(row, 0).text())) + endInd.append(str(self._scoreTable.item(row, 1).text())) + stage.append(str(self._scoreTable.item(row, 2).text())) + # Get file name : + path = dialogSave(self, 'Save file', 'scoring_info', + "CSV file (*.csv);;Text file (*.txt);;" + "All files (*.*)") + if path: + file, ext = os.path.splitext(path) + if ext.find('csv') + 1: + write_csv(file + '.csv', zip(staInd, endInd, stage)) + elif ext.find('txt') + 1: + write_txt(file + '.txt', zip(staInd, endInd, stage)) + + # ______________________ DETECTIONS ______________________ + def _CheckDetectMenu(self): + """Activate/Deactivate the saving detection menu.""" + self.menuSaveDetections.setEnabled(bool(self._detect)) + + def saveAllDetect(self): + """Export all detections.""" + # Get file name : + path = dialogSave(self, 'Save all detections', 'detections', + "NumPy (*.npy);;All files (*.*)") + if path: + file = os.path.splitext(str(path))[0] + np.save(file + '.npy', self._detect.dict) + + def saveSelectDetect(self): + """Export selected detection.""" + channel = self._currentLoc[0] + method = self._currentLoc[1] + # Read Table + rowCount = self._DetectLocations.rowCount() + staInd = [channel, '', 'Time index (s)'] + duration = [method, '', 'Duration (s)'] + stage = ['', '', 'Sleep stage'] + for row in np.arange(rowCount): + staInd.append(str(self._DetectLocations.item(row, 0).text())) + duration.append(str(self._DetectLocations.item(row, 1).text())) + stage.append(str(self._DetectLocations.item(row, 2).text())) + # Get file name : + saveas = "locinfo" + '_' + channel + '-' + method + path = dialogSave(self, 'Save ' + method + ' detection', saveas, + "CSV file (*.csv);;Text file (*.txt);;" + "All files (*.*)") + if path: + file, ext = os.path.splitext(path) + file += '_' + channel + '-' + method + if ext.find('csv') + 1: + write_csv(file + '.csv', zip(staInd, duration, stage)) + elif ext.find('txt') + 1: + write_txt(file + '.txt', zip(staInd, duration, stage)) + + # ______________________ SLEEP GUI CONFIG ______________________ + def saveConfig(self): + """Save a config file (*.txt) containing several display parameters.""" + import json + filename = dialogSave(self, 'Save config File', 'config', + "Text file (*.txt);;All files (*.*)") + if filename: + with open(filename, 'w') as f: + config = {} + # Get channels visibility / amplitude : + viz, amp = [], [] + for i, k in enumerate(self._chanChecks): + viz.append(k.isChecked()) + amp.append(self._ymaxSpin[i].value()) + config['Channel_Names'] = self._channels + config['Channel_Visible'] = viz + config['Channel_Amplitude'] = amp + config['AllAmpMin'] = self._PanAllAmpMin.value() + config['AllAmpMax'] = self._PanAllAmpMax.value() + config['SymAmp'] = self._PanAmpSym.isChecked() + config['AutoAmp'] = self._PanAmpAuto.isChecked() + # Spectrogram : + config['Spec_Visible'] = self.menuDispSpec.isChecked() + config['Spec_Length'] = self._PanSpecNfft.value() + config['Spec_Overlap'] = self._PanSpecStep.value() + config['Spec_Cmap'] = self._PanSpecCmap.currentIndex() + config['Spec_Chan'] = self._PanSpecChan.currentIndex() + config['Spec_Fstart'] = self._PanSpecFstart.value() + config['Spec_Fend'] = self._PanSpecFend.value() + config['Spec_Con'] = self._PanSpecCon.value() + # Hypnogram/time axis/navigation/topo/indic/zoom : + config['Hyp_Visible'] = self.menuDispHypno.isChecked() + config['Time_Visible'] = self.menuDispTimeax.isChecked() + config['Topo_Visible'] = self.menuDispTopo.isChecked() + config['Nav_Visible'] = self.menuDispNavbar.isChecked() + config['Indic_Visible'] = self.menuDispIndic.isChecked() + config['Zoom_Visible'] = self.menuDispZoom.isChecked() + # Navigation bar properties : + config['Slider'] = self._SlVal.value() + config['Step'] = self._SigSlStep.value() + config['Window'] = self._SigWin.value() + config['Goto'] = self._SlGoto.value() + config['Magnify'] = self._slMagnify.isChecked() + config['AbsTime'] = self._slAbsTime.isChecked() + config['Grid'] = self._slGrid.isChecked() + config['Unit'] = self._slRules.currentIndex() + json.dump(config, f) + + # ______________________ SCREENSHOT ______________________ + def saveScreenEntire(self): + """Screenshot using the GUI.""" + # self.setFixedSize(100, 100) + # Get filename : + filename = dialogSave(self, 'Screenshot', 'screenshot', "PNG (*.PNG);;" + "TIFF (*.tiff);;JPG (*.jpg);;""All files (*.*)") + # Screnshot function : + def _takeScreenShot(): + """Take the screenshot.""" + screen = QtWidgets.QApplication.primaryScreen() + p = screen.grabWindow(0) + p.save(filename) + # Take screenshot if filename : + if filename: + # Timer (avoid shooting the saving window) + self.timerScreen = QTimer() + # self.timerScreen.setInterval(100) + self.timerScreen.setSingleShot(True) + self.timerScreen.timeout.connect(_takeScreenShot) + self.timerScreen.start(500) + + ########################################################################### + ########################################################################### + # LOAD + ########################################################################### + ########################################################################### + + def loadHypno(self): + """Load a hypnogram.""" + # Get filename : + filename = dialogLoad(self, 'Load hypnogram File', 'hypno', + "Text file (*.txt);;Elan file (*.hyp);;" + "All files (*.*)") + if filename: + # Load the hypnogram : + self._hypno = read_hypno(filename, self._N).astype(np.float32) + self._hyp.set_data(self._sf, self._hypno, self._time) + # Update info table : + self._fcn_infoUpdate() + # Update scoring table : + self._fcn_Hypno2Score() + self._fcn_Score2Hypno() + + def loadConfig(self): + """Load a config file (*.txt) containing several display parameters.""" + import json + if self._config_file is not None: + filename = self._config_file + else: + filename = dialogLoad(self, 'Load config File', 'config', + "Text file (*.txt);;All files (*.*)") + if filename: + with open(filename) as f: + # Load the configuration file : + config = json.load(f) + + def _try(string, self=self, config=config): + """Execute the string. + + This function insure backward compatibility for loading the + configuration file. + """ + try: + exec(string) + except: + pass + + # Channels + for i, k in enumerate(self._chanChecks): + self._chanChecks[i].setChecked(config['Channel_Visible'][i]) + self._ymaxSpin[i].setValue(config['Channel_Amplitude'][i]) + # Amplitudes : + _try("self._PanAllAmpMin.setValue(config['AllAmpMin'])") + _try("self._PanAllAmpMax.setValue(config['AllAmpMax'])") + _try("self._PanAmpSym.setChecked(config['SymAmp'])") + _try("self._PanAmpAuto.setChecked(config['AutoAmp'])") + # Spectrogram + _try("self.menuDispSpec.setChecked(config['Spec_Visible'])") + _try("self._PanSpecNfft.setValue(config['Spec_Length'])") + _try("self._PanSpecStep.setValue(config['Spec_Overlap'])") + _try("self._PanSpecCmap.setCurrentIndex(config['Spec_Cmap'])") + _try("self._PanSpecChan.setCurrentIndex(config['Spec_Chan'])") + _try("self._PanSpecFstart.setValue(config['Spec_Fstart'])") + _try("self._PanSpecFend.setValue(config['Spec_Fend'])") + _try("self._PanSpecCon.setValue(config['Spec_Con'])") + # Hypnogram/time axis/navigation/topo/indic/zoom : + _try("self.menuDispHypno.setChecked(config['Hyp_Visible'])") + _try("self.menuDispTimeax.setChecked(config['Time_Visible'])") + _try("self.menuDispTopo.setChecked(config['Topo_Visible'])") + _try("self.menuDispNavbar.setChecked(config['Nav_Visible'])") + _try("self.menuDispIndic.setChecked(config['Indic_Visible'])") + # Navigation bar properties : + _try("self._SlVal.setValue(config['Slider'])") + _try("self._SigSlStep.setValue(config['Step'])") + _try("self._SigWin.setValue(config['Window'])") + _try("self._SlGoto.setValue(config['Goto'])") + _try("self._slMagnify.setChecked(config['Magnify'])") + _try("self._slAbsTime.setChecked(config['AbsTime'])") + _try("self._slGrid.setChecked(config['Grid'])") + _try("self._slRules.setCurrentIndex(config['Unit'])") + # Update display + self._fcn_chanViz() + self._fcn_chanAmplitude() + self._fcn_specSetData() + self._disptog_spec() + self._disptog_hyp() + self._disptog_timeax() + self._disptog_topo() + self._disptog_indic() + self._disptog_zoom() + self._fcn_gridToggle() + self._fcn_updateAmpInfo() + self._fcn_chanAutoAmp() + self._fcn_chanSymAmp() + + def loadDetectAll(self): + """Load all detections.""" + # Dialog window for detection file : + file = dialogLoad(self, "Import detections", '', + "NumPy (*.npy);;All files (*.*)") + self._detect.dict = np.ndarray.tolist(np.load(file)) + # Made canvas visbles : + for k in self._detect: + if self._detect[k]['index'].size: + # Get channel number : + idx = self._channels.index(k[0]) + self.canvas_setVisible(idx, True) + self._chan.visible[idx] = True + # Plot update : + self._fcn_sliderMove() + self._locLineReport() + self._CheckDetectMenu() + + def loadDetectSelect(self): + """Load a specific detection.""" + # Get file name : + file = dialogLoad(self, "Import table", '', + "CSV file (*.csv);;Text file (*.txt);;" + "All files (*.*)") + # Get channel / method from file name : + (chan, meth) = file.split('_')[-1].split('.')[0].split('-') + # Load the file : + (st, dur) = np.genfromtxt(file, delimiter=',')[3::, 0:2].T + # Sort by starting index : + idxsort = np.argsort(st) + st, dur = st[idxsort], dur[idxsort] + # Convert into index : + stInd = np.round(st * self._sf).astype(int) + durInd = np.round(dur * self._sf / 1000.).astype(int) + # Build the index array : + index = np.array([]) + for k, i in zip(stInd, durInd): + index = np.append(index, np.arange(k, k+i)) + index = index.astype(np.int, copy=False) + # Set index : + self._detect[(chan, meth)]['index'] = index + # Plot update : + self._fcn_sliderMove() + self._locLineReport() + self._CheckDetectMenu() + + ########################################################################### + ########################################################################### + # DISPLAY + ########################################################################### + ########################################################################### + + def _disptog_settings(self): + """Toggle method for display / hide the settings panel. + + Shortcut : CTRL + D + """ + self.q_widget.setVisible(not self.q_widget.isVisible()) + + def _disptog_spec(self): + """Toggle method for display / hide the spectrogram. + + Shortcut : S + """ + viz = self.menuDispSpec.isChecked() + self._SpecW.setVisible(viz) + self._specLabel.setVisible(viz) + self._PanSpecW.setEnabled(viz) + + def _disptog_hyp(self): + """Toggle method for display / hide the hypnogram. + + Shortcut : H + """ + viz = self.menuDispHypno.isChecked() + self._HypW.setVisible(viz) + self._hypLabel.setVisible(viz) + + def _disptog_navbar(self): + """Toggle method for display / hide the navigation bar. + + Shortcut : P + """ + self._slFrame.hide() if self._slFrame.isVisible( + ) else self._slFrame.show() + + def _disptog_timeax(self): + """Toggle method for display / hide the time axis. + + Shortcut : X + """ + viz = self.menuDispTimeax.isChecked() + self._TimeAxisW.setVisible(viz) + self._timeLabel.setVisible(viz) + + def _disptog_topo(self): + """Toggle method for display / hide the topoplot. + + Shortcut : T + """ + viz = self.menuDispTopo.isChecked() + self._topoW.setVisible(viz) + self._PanTopoVizW.setEnabled(viz) + if viz: + self._fcn_topoSettings() + self._fcn_sliderMove() + + def _disptog_indic(self): + """Toggle method for display / hide the time indicators.""" + self._specInd.mesh.visible = self.menuDispIndic.isChecked() + self._hypInd.mesh.visible = self.menuDispIndic.isChecked() + self._TimeAxis.mesh.visible = self.menuDispIndic.isChecked() + self._fcn_sliderMove() + + def _disptog_zoom(self): + """Toggle zoom mode.""" + activeIndic = self.menuDispZoom.isChecked() + if not activeIndic: + # Spectrogram camera : + self._speccam.rect = (self._time.min(), self._spec.freq[0], + self._time.max() - self._time.min(), + self._spec.freq[-1] - self._spec.freq[0]) + self._specInd.mesh.visible = self.menuDispIndic.isChecked() + # Hypnogram camera : + self._hypcam.rect = (self._time.min(), -5., + self._time.max() - self._time.min(), 7.) + # Time camera : + self._timecam.rect = (self._time.min(), 0., + self._time.max() - self._time.min(), 1.) + + # Activate / Deactivate indicators : + self.menuDispIndic.setChecked(not activeIndic) + self.menuDispIndic.setEnabled(not activeIndic) + self._hypInd.mesh.visible = not activeIndic + self._specInd.mesh.visible = not activeIndic + self._TimeAxis.mesh.visible = not activeIndic + + self._fcn_sliderSettings() + + ########################################################################### + ########################################################################### + # SETTINGS + ########################################################################### + ########################################################################### + def settCleanHyp(self): + """Clean the hypnogram.""" + self._hypno = np.zeros((len(self._hyp),), dtype=np.float32) + self._hyp.clean(self._sf, self._time) + # Update info table : + self._fcn_infoUpdate() + # Update scoring table : + self._fcn_Hypno2Score() + self._fcn_Score2Hypno() + + ########################################################################### + ########################################################################### + # SHORTCUT & DOC + ########################################################################### + ########################################################################### + + def _fcn_showShortPopup(self): + """Open shortcut window.""" + self._shpopup.show() + + def _fcn_openDoc(self): + """Open documentation.""" + import webbrowser + webbrowser.open('http://etiennecmb.github.io/visbrain/sleep.html') + + def _fcn_downloadDoc(self): + """Open documentation.""" + import webbrowser + webbrowser.open("https://drive.google.com/file/d/" + "0B6vtJiCQZUBvNFJMTER3SERGUW8/view?usp=sharing") diff --git a/visbrain/sleep/interface/uiElements/uiPanels.py b/visbrain/sleep/interface/uiElements/uiPanels.py index 54d24a8bd..07829d0e1 100644 --- a/visbrain/sleep/interface/uiElements/uiPanels.py +++ b/visbrain/sleep/interface/uiElements/uiPanels.py @@ -1,5 +1,5 @@ """Main class for settings managment.""" -from PyQt4 import QtCore, QtGui +from PyQt5 import QtCore, QtGui, QtWidgets import numpy as np @@ -24,11 +24,12 @@ def __init__(self): # Bold font : self._font = QtGui.QFont() self._font.setBold(True) + self._addspace = ' ' # ===================================================================== # MAIN GRID : # ===================================================================== - self._chanGrid = QtGui.QGridLayout() + self._chanGrid = QtWidgets.QGridLayout() self._chanGrid.setContentsMargins(-1, -1, -1, 6) self._chanGrid.setSpacing(3) self._chanGrid.setObjectName(_fromUtf8("_chanGrid")) @@ -69,8 +70,8 @@ def __init__(self): self._SpecLayout.addWidget(self._specCanvas.canvas.native) self._chanGrid.addWidget(self._SpecW, len(self) + 1, 1, 1, 1) # Add label : - self._specLabel = QtGui.QLabel(self.centralwidget) - self._specLabel.setText(self._channels[0]) + self._specLabel = QtWidgets.QLabel(self.centralwidget) + self._specLabel.setText(self._addspace + self._channels[0]) self._specLabel.setFont(self._font) self._chanGrid.addWidget(self._specLabel, len(self) + 1, 0, 1, 1) # Add list of colormaps : @@ -81,7 +82,6 @@ def __init__(self): self._PanSpecChan.addItems(self._channels) # Connect spectrogam properties : self._PanSpecApply.setEnabled(False) - self._PanSpecViz.clicked.connect(self._fcn_specViz) self._PanSpecApply.clicked.connect(self._fcn_specSetData) self._PanSpecNfft.valueChanged.connect(self._fcn_specCompat) self._PanSpecStep.valueChanged.connect(self._fcn_specCompat) @@ -95,7 +95,6 @@ def __init__(self): # ===================================================================== # HYPNOGRAM # ===================================================================== - self._PanHypViz.clicked.connect(self._fcn_hypViz) self._hypCanvas = AxisCanvas(axis=self._ax, bgcolor=(1., 1., 1.), y_label=None, x_label=None, name='Spectrogram', color='black', @@ -106,14 +105,13 @@ def __init__(self): self._HypLayout.addWidget(self._hypCanvas.canvas.native) self._chanGrid.addWidget(self._HypW, len(self) + 2, 1, 1, 1) # Add label : - self._hypLabel = QtGui.QWidget() - layout = QtGui.QVBoxLayout(self._hypLabel) - layout.setMargin(0) - layout.setSpacing(0) + self._hypLabel = QtWidgets.QWidget() + layout = QtWidgets.QVBoxLayout(self._hypLabel) + layout.setContentsMargins(0, 0, 0, 0) self._hypYLabels = [] for k in self._href+['']: - label = QtGui.QLabel() - label.setText(k) + label = QtWidgets.QLabel() + label.setText(self._addspace + k) label.setFont(self._font) layout.addWidget(label) self._hypYLabels.append(label) @@ -135,7 +133,6 @@ def __init__(self): # Connect : self._PanTopoCmap.addItems(self._cmap_lst) self._PanTopoCmap.setCurrentIndex(self._cmap_lst.index(self._defcmap)) - self._PanTopoViz.clicked.connect(self._fcn_topoViz) self._PanTopoCmin.setKeyboardTracking(False) self._PanTopoCmin.valueChanged.connect(self._fcn_topoSettings) self._PanTopoCmax.setKeyboardTracking(False) @@ -150,7 +147,6 @@ def __init__(self): # ===================================================================== # TIME AXIS # ===================================================================== - self._PanTimeViz.clicked.connect(self._fcn_timeViz) # Create a unique time axis : self._TimeAxis = TimeAxis(xargs={'text_color': 'black'}, x_label=None, @@ -164,33 +160,26 @@ def __init__(self): self._TimeAxisW.setMinimumHeight(50) self._chanGrid.addWidget(self._TimeAxisW, len(self) + 3, 1, 1, 1) # Add label : - self._timeLabel = QtGui.QLabel(self.centralwidget) - self._timeLabel.setText('Time') + self._timeLabel = QtWidgets.QLabel(self.centralwidget) + self._timeLabel.setText(self._addspace + 'Time') self._timeLabel.setFont(self._font) self._chanGrid.addWidget(self._timeLabel, len(self) + 3, 0, 1, 1) - # ===================================================================== - # INDICATORS - # ===================================================================== - self._PanSpecIndic.clicked.connect(self._fcn_indicviz) - self._PanHypIndic.clicked.connect(self._fcn_indicviz) - self._PanTimeIndic.clicked.connect(self._fcn_indicviz) - # ===================================================================== # CHANNELS # ===================================================================== def _createCompatibleW(self, nameWiget, nameLayout, visible=False): """This function create a widget and a layout.""" - Widget = QtGui.QWidget(self.centralwidget) + Widget = QtWidgets.QWidget(self.centralwidget) Widget.setMinimumSize(QtCore.QSize(0, 0)) Widget.setObjectName(_fromUtf8(nameWiget)) Widget.setVisible(visible) - vlay = QtGui.QVBoxLayout(Widget) + vlay = QtWidgets.QVBoxLayout(Widget) vlay.setContentsMargins(9, 0, 9, 0) vlay.setSpacing(0) vlay.setObjectName(_fromUtf8("vlay")) # Create layout : - Layout = QtGui.QVBoxLayout() + Layout = QtWidgets.QVBoxLayout() Layout.setSpacing(0) Layout.setObjectName(_fromUtf8(nameLayout)) vlay.addLayout(Layout) @@ -209,20 +198,23 @@ def _fcn_chanCheckAndWCreate(self): self._amplitudeTxt = [] # Define a vertical and horizontal spacers : - vspacer = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Expanding, - QtGui.QSizePolicy.Minimum) - hspacer = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, - QtGui.QSizePolicy.Minimum) + vspacer = QtWidgets.QSpacerItem(20, 40, + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Minimum) + hspacer = QtWidgets.QSpacerItem(40, 20, + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Minimum) # Loop over channels : for i, k in enumerate(self._channels): # ============ CHECKBOX ============ # ----- MAIN CHECKBOX ----- # Add a checkbox to the scrolling panel : - self._chanChecks[i] = QtGui.QCheckBox(self._PanScrollChan) + self._chanChecks[i] = QtWidgets.QCheckBox(self._PanScrollChan) # Name checkbox with channel name : self._chanChecks[i].setObjectName(_fromUtf8("_CheckChan"+k)) self._chanChecks[i].setText(k) + self._chanChecks[i].setShortcut("Ctrl+"+str(i)) # Add checkbox to the grid : self._PanChanLay.addWidget(self._chanChecks[i], i, 0, 1, 1) # Connect with the function : @@ -231,12 +223,12 @@ def _fcn_chanCheckAndWCreate(self): # ----- LABEL/ Y-MIN / Y-MAX ----- fact = 5. # Add amplitude label : - amplitude = QtGui.QLabel(self._PanScrollChan) + amplitude = QtWidgets.QLabel(self._PanScrollChan) amplitude.setText('Amp') self._amplitudeTxt.append(amplitude) self._PanChanLay.addWidget(amplitude, i, 2, 1, 1) # Add ymin spinbox : - self._yminSpin[i] = QtGui.QDoubleSpinBox(self._PanScrollChan) + self._yminSpin[i] = QtWidgets.QDoubleSpinBox(self._PanScrollChan) self._yminSpin[i].setDecimals(1) self._yminSpin[i].setMinimum(self['min'][i]) self._yminSpin[i].setMaximum(self['max'][i]) @@ -244,7 +236,7 @@ def _fcn_chanCheckAndWCreate(self): self._yminSpin[i].setSingleStep(1.) self._PanChanLay.addWidget(self._yminSpin[i], i, 3, 1, 1) # Add ymax spinbox : - self._ymaxSpin[i] = QtGui.QDoubleSpinBox(self._PanScrollChan) + self._ymaxSpin[i] = QtWidgets.QDoubleSpinBox(self._PanScrollChan) self._ymaxSpin[i].setDecimals(1) self._ymaxSpin[i].setMinimum(self['min'][i]) self._ymaxSpin[i].setMaximum(self['max'][i]) @@ -261,8 +253,8 @@ def _fcn_chanCheckAndWCreate(self): i] = self._createCompatibleW("_widgetChan"+k, "_LayoutChan"+k) self._chanGrid.addWidget(self._chanWidget[i], i, 1, 1, 1) # Add channel label : - self._chanLabels.append(QtGui.QLabel(self.centralwidget)) - self._chanLabels[i].setText(k) + self._chanLabels.append(QtWidgets.QLabel(self.centralwidget)) + self._chanLabels[i].setText(self._addspace + k) self._chanLabels[i].setFont(self._font) self._chanLabels[i].setVisible(False) self._chanGrid.addWidget(self._chanLabels[i], i, 0, 1, 1) @@ -407,14 +399,6 @@ def canvas_setVisible(self, k, value): # ===================================================================== # SPECTROGRAM # ===================================================================== - def _fcn_specViz(self): - """Toggle visibility of the spectrogram panel.""" - viz = self._PanSpecViz.isChecked() - self._PanSpecW.setEnabled(viz) - self._SpecW.setVisible(viz) - self._specLabel.setVisible(viz) - self._PanSpecIndic.setEnabled(viz) - def _fcn_specSetData(self): """Set data to the spectrogram.""" # Get nfft and overlap : @@ -430,7 +414,7 @@ def _fcn_specSetData(self): # Get reversed colormap : if self._PanSpecCmapInv.isChecked(): cmap += '_r' - self._specLabel.setText(self._channels[chan]) + self._specLabel.setText(self._addspace + self._channels[chan]) # Set data : self._spec.set_data(self._sf, self._data[chan, ...], self._time, nfft=nfft, overlap=over, fstart=fstart, fend=fend, @@ -451,28 +435,9 @@ def _fcn_specCompat(self): # Set apply button enable : self._PanSpecApply.setEnabled(True) - # ===================================================================== - # HYPNOGRAM - # ===================================================================== - def _fcn_hypViz(self): - """Toggle visibility of the spectrogram panel.""" - viz = self._PanHypViz.isChecked() - self._HypW.setVisible(viz) - self._hypLabel.setVisible(viz) - self._PanHypIndic.setEnabled(viz) - # ===================================================================== # TOPOPLOT # ===================================================================== - def _fcn_topoViz(self): - """Toggle topo panel visibility.""" - viz = not self._topoW.isVisible() - self._topoW.setVisible(viz) - self._PanTopoVizW.setEnabled(viz) - if self._PanTopoViz.isChecked(): - self._fcn_topoSettings() - self._fcn_sliderMove() - def _fcn_topoSettings(self): """Manage colormap of the topoplot.""" # ============== TYPE ============== @@ -508,23 +473,3 @@ def _fcn_topoApply(self): """Apply topo settings.""" self._fcn_sliderMove() self._PanTopoApply.setEnabled(False) - - # ===================================================================== - # TIME AXIS - # ===================================================================== - def _fcn_timeViz(self): - """Toggle visibility of the time panel.""" - viz = self._PanTimeViz.isChecked() - self._TimeAxisW.setVisible(viz) - self._PanTimeIndic.setEnabled(viz) - self._timeLabel.setVisible(viz) - - # ===================================================================== - # INDICATORS - # ===================================================================== - def _fcn_indicviz(self): - """Toggle indicator visibility.""" - self._specInd.mesh.visible = self._PanSpecIndic.isChecked() - self._hypInd.mesh.visible = self._PanHypIndic.isChecked() - self._TimeAxis.mesh.visible = self._PanTimeIndic.isChecked() - self._fcn_sliderMove() diff --git a/visbrain/sleep/interface/uiElements/uiScoring.py b/visbrain/sleep/interface/uiElements/uiScoring.py index 0c767a8ae..d04a2e74f 100644 --- a/visbrain/sleep/interface/uiElements/uiScoring.py +++ b/visbrain/sleep/interface/uiElements/uiScoring.py @@ -1,10 +1,9 @@ """Main class for settings managment.""" import numpy as np import os -from PyQt4 import QtGui +from PyQt5 import QtWidgets from ....utils import transient -from ....utils import listToCsv, listToTxt __all__ = ['uiScoring'] @@ -21,9 +20,6 @@ def __init__(self): # Table edited : self._scoreTable.cellChanged.connect(self._fcn_Score2Hypno) - # Export file : - self._scoreExport.clicked.connect(self._fcn_exportScore) - ########################################################################## # UPDATE SCORE <=> HYPNO ########################################################################## @@ -45,12 +41,12 @@ def _fcn_Hypno2Score(self): # Fill the table : for k in range(len(stages)): # Add stage start / end : - self._scoreTable.setItem(k, 0, QtGui.QTableWidgetItem( + self._scoreTable.setItem(k, 0, QtWidgets.QTableWidgetItem( str(idx[k, 0]))) - self._scoreTable.setItem(k, 1, QtGui.QTableWidgetItem( + self._scoreTable.setItem(k, 1, QtWidgets.QTableWidgetItem( str(idx[k, 1]))) # Add stage : - self._scoreTable.setItem(k, 2, QtGui.QTableWidgetItem( + self._scoreTable.setItem(k, 2, QtWidgets.QTableWidgetItem( items[stages[k]])) self._scoreSet = True @@ -150,29 +146,3 @@ def _fcn_rmScoreRow(self): self._scoreTable.removeRow(self._scoreTable.currentRow()) # Update hypnogram from table : self._fcn_Score2Hypno() - - ########################################################################## - # EXPORT TABLE - ########################################################################## - def _fcn_exportScore(self): - """Export score info.""" - # Read Table - rowCount = self._scoreTable.rowCount() - staInd, endInd, stage = [], [], [] - for row in np.arange(rowCount): - staInd.append(str(self._scoreTable.item(row, 0).text())) - endInd.append(str(self._scoreTable.item(row, 1).text())) - stage.append(str(self._scoreTable.item(row, 2).text())) - # Find extension : - selected_ext = str(self._scoreExportAs.currentText()) - # Get file name : - path = QtGui.QFileDialog.getSaveFileName( - self, "Save File", "scoring_info", - filter=selected_ext) - path = str(path) # py2 - if path: - file = os.path.splitext(str(path))[0] - if selected_ext.find('csv') + 1: - listToCsv(file + '.csv', zip(staInd, endInd, stage)) - elif selected_ext.find('txt') + 1: - listToTxt(file + '.txt', zip(staInd, endInd, stage)) diff --git a/visbrain/sleep/interface/uiElements/uiSettings.py b/visbrain/sleep/interface/uiElements/uiSettings.py index 56ab8259e..8b176d357 100644 --- a/visbrain/sleep/interface/uiElements/uiSettings.py +++ b/visbrain/sleep/interface/uiElements/uiSettings.py @@ -1,15 +1,10 @@ """Main class for settings managment.""" import numpy as np -import os import datetime - -from PyQt4.QtGui import * -from PyQt4.QtCore import QObjectCleanupHandler, QTimer +from PyQt5.QtCore import QObjectCleanupHandler import vispy.visuals.transforms as vist -from ....utils import save_hypnoTotxt, save_hypnoToElan, save_hypnoToFig - __all__ = ['uiSettings'] @@ -19,36 +14,6 @@ class uiSettings(object): def __init__(self): """Init.""" - # ===================================================================== - # MENU & FILES - # ===================================================================== - # ---------------------- Screenshot ---------------------- - self.actionScreenshot.triggered.connect(self._screenshot) - self.actionExit.triggered.connect(qApp.quit) - - # ---------------------- Save ---------------------- - self.actionHypnogram_data.triggered.connect(self.saveFile) - self.actionHypnogram_figure.triggered.connect(self.saveHypFig) - self.actionInfo_table.triggered.connect(self._fcn_exportInfos) - self.actionScoring_table.triggered.connect(self._fcn_exportScore) - self.actionDetection_table.triggered.connect(self._fcn_exportLocation) - self.actionSaveConfig.triggered.connect(self.saveConfig) - - # ---------------------- Load ---------------------- - self.actionLoadConfig.triggered.connect(self.loadConfig) - - # ---------------------- Shortcut & Doc ---------------------- - self.actionShortcut.triggered.connect(self._fcn_showShortPopup) - self.actionDocumentation.triggered.connect(self._fcn_openDoc) - self.actionDownload_pdf_doc.triggered.connect(self._fcn_downloadDoc) - - # ===================================================================== - # SETTINGS PANEL - # ===================================================================== - # Quick settings panel : - self.actionQuick_settings.triggered.connect(self._toggle_settings) - self.q_widget.setVisible(True) - # ===================================================================== # SLIDER # ===================================================================== @@ -77,161 +42,6 @@ def __init__(self): # Magnify : self._slMagnify.clicked.connect(self._fcn_sliderMagnify) - # ===================================================================== - # ZOOMING - # ===================================================================== - self._PanHypZoom.clicked.connect(self._fcn_Zooming) - self._PanSpecZoom.clicked.connect(self._fcn_Zooming) - self._PanTimeZoom.clicked.connect(self._fcn_Zooming) - - # ===================================================================== - # MENU & FILE MANAGMENT - # ===================================================================== - def _fcn_showShortPopup(self): - """Open shortcut window.""" - self._shpopup.show() - - def _fcn_openDoc(self): - """Open documentation.""" - import webbrowser - webbrowser.open('http://etiennecmb.github.io/visbrain/sleep.html') - - def _fcn_downloadDoc(self): - """Open documentation.""" - import webbrowser - webbrowser.open("https://drive.google.com/file/d/" - "0B6vtJiCQZUBvNFJMTER3SERGUW8/view?usp=sharing") - - # ===================================================================== - # SCREENSHOT - # ===================================================================== - def _screenshot(self): - """Screenshot using the GUI.""" - # self.setFixedSize(100, 100) - # Get filename : - filename = QFileDialog.getSaveFileName(self, 'Screenshot', - 'screenshot', "PNG (*.PNG);;" - "TIFF (*.tiff);;JPG (*.jpg);;" - "All files (*.*)") - filename = str(filename) # py2 - # Screnshot function : - def _takeScreenShot(): - """Take the screenshot.""" - file, ext = os.path.splitext(filename) - # p = QPixmap.grabWidget(self.centralwidget) - p = QPixmap.grabWindow(self.centralwidget.winId()) - p.save(file + '.png') - # Take screenshot if filename : - if filename: - # Timer (avoid shooting the saving window) - self.timerScreen = QTimer() - # self.timerScreen.setInterval(100) - self.timerScreen.setSingleShot(True) - self.timerScreen.timeout.connect(_takeScreenShot) - self.timerScreen.start(500) - - def _toggle_settings(self): - """Toggle method for display / hide the settings panel.""" - self.q_widget.setVisible(not self.q_widget.isVisible()) - - def saveFile(self): - """Save the hypnogram.""" - filename = QFileDialog.getSaveFileName(self, 'Save File', 'hypno', - "Text file (*.txt);;Elan file " - "(*.hyp);;All files (*.*)") - filename = str(filename) # py2 - if filename: - file, ext = os.path.splitext(filename) - - # Switch between differents types : - if ext == '.hyp': - save_hypnoToElan(filename, self._hypno, self._sf, self._sfori, - self._N) - elif ext == '.txt': - save_hypnoTotxt(filename, self._hypno, self._sf, self._sfori, - self._N, 1) - else: - raise ValueError("Not a valid extension") - - def saveHypFig(self): - """Save a 600 dpi .png figure of the hypnogram.""" - filename = QFileDialog.getSaveFileName(self, 'Save Hypnogram figure', - 'hypno.png', "PNG (*.png)") - filename = str(filename) # py2 - if filename: - save_hypnoToFig(filename, self._hypno, self._sf, self._toffset) - - def saveConfig(self): - """Save a config file (*.txt) containing several display parameters.""" - import json - upath = os.path.split(self._file)[0] - filename = QFileDialog.getSaveFileName(self, 'Save config file', - upath, "Text file (*.txt)") - filename = str(filename) # py2 - if filename: - with open(filename, 'w') as f: - config = {} - viz = [] - amp = [] - for i, k in enumerate(self._chanChecks): - viz.append(k.isChecked()) - amp.append(self._ymaxSpin[i].value()) - - config['Channel_Names'] = self._channels - config['Channel_Visible'] = viz - config['Channel_Amplitude'] = amp - config['Spec_Visible'] = self._PanSpecViz.isChecked() - config['Spec_Length'] = self._PanSpecNfft.value() - config['Spec_Overlap'] = self._PanSpecStep.value() - config['Spec_Cmap'] = self._PanSpecCmap.currentIndex() - config['Spec_Chan'] = self._PanSpecChan.currentIndex() - config['Spec_Fstart'] = self._PanSpecFstart.value() - config['Spec_Fend'] = self._PanSpecFend.value() - config['Spec_Con'] = self._PanSpecCon.value() - config['Hyp_Visible'] = self._PanHypViz.isChecked() - config['Time_Visible'] = self._PanTimeViz.isChecked() - json.dump(config, f) - - def loadConfig(self): - """Load a config file (*.txt) containing several display parameters.""" - import json - if hasattr(self, '_config_file'): - filename = str(self._config_file) - else: - upath = os.path.split(self._file)[0] - filename = QFileDialog.getOpenFileName( - self, "Open config file", upath, "Text file (*.txt)") - filename = str(filename) # py2 - - with open(filename) as f: - config = json.load(f) - # Channels - for i, k in enumerate(self._chanChecks): - self._chanChecks[i].setChecked(config['Channel_Visible'][i]) - self._ymaxSpin[i].setValue(config['Channel_Amplitude'][i]) - - # Spectrogram - self._PanSpecViz.setChecked(config['Spec_Visible']) - self._PanSpecNfft.setValue(config['Spec_Length']) - self._PanSpecStep.setValue(config['Spec_Overlap']) - self._PanSpecCmap.setCurrentIndex(config['Spec_Cmap']) - self._PanSpecChan.setCurrentIndex(config['Spec_Chan']) - self._PanSpecFstart.setValue(config['Spec_Fstart']) - self._PanSpecFend.setValue(config['Spec_Fend']) - self._PanSpecCon.setValue(config['Spec_Con']) - - # Hypnogram & Time axis - self._PanHypViz.setChecked(config['Hyp_Visible']) - self._PanTimeViz.setChecked(config['Time_Visible']) - - # Update display - self._fcn_chanViz() - self._fcn_chanAmplitude() - self._fcn_specViz() - self._fcn_specSetData() - self._fcn_hypViz() - self._fcn_timeViz() - # ===================================================================== # SLIDER # ===================================================================== @@ -243,9 +53,7 @@ def _fcn_sliderMove(self): step = self._SigSlStep.value() win = self._SigWin.value() xlim = (val*step, val*step+win) - specZoom = self._PanSpecZoom.isChecked() - hypZoom = self._PanHypZoom.isChecked() - timeZoom = self._PanTimeZoom.isChecked() + iszoom = self.menuDispZoom.isChecked() unit = str(self._slRules.currentText()) # Find closest time index : @@ -261,14 +69,15 @@ def _fcn_sliderMove(self): ylim=self._ylims) # --------------------------------------- + isIndicChecked = self.menuDispIndic.isChecked() # Update spectrogram indicator : - if self._PanSpecIndic.isEnabled() and not specZoom: + if isIndicChecked and not iszoom: ylim = (self._PanSpecFstart.value(), self._PanSpecFend.value()) self._specInd.set_data(xlim=xlim, ylim=ylim) # --------------------------------------- # Update hypnogram indicator : - if self._PanHypIndic.isEnabled() and not hypZoom: + if isIndicChecked and not iszoom: self._hypInd.set_data(xlim=xlim, ylim=(-6., 2.)) # --------------------------------------- @@ -278,7 +87,7 @@ def _fcn_sliderMove(self): # --------------------------------------- # Update Time indicator : - if self._PanTimeIndic.isEnabled(): + if isIndicChecked: self._TimeAxis.set_data(xlim[0], win, self._time, unit=unit) # ================= GUI ================= @@ -286,17 +95,14 @@ def _fcn_sliderMove(self): self._SlGoto.setValue(val*step) # ================= ZOOMING ================= - # Histogram : - if hypZoom: + if iszoom: + # Histogram : self._hypcam.rect = (xlim[0], -5, xlim[1]-xlim[0], 7.) - - # Spectrogram : - if specZoom: + # Spectrogram : self._speccam.rect = (xlim[0], self._spec.freq[0], xlim[1]-xlim[0], self._spec.freq[-1] - self._spec.freq[0]) - # Time axis : - if timeZoom: + # Time axis : self._TimeAxis.set_data(xlim[0], win, np.array([xlim[0], xlim[1]]), unit='seconds') self._timecam.rect = (xlim[0], 0., win, 1.) @@ -360,7 +166,7 @@ def _fcn_sliderSettings(self): if self._slOnStart: self._fcn_sliderMove() # Update grid : - if self._PanHypZoom.isChecked(): + if self.menuDispZoom.isChecked(): self._hyp.set_grid(self._time, step) else: self._hyp.set_grid(self._time, win) @@ -408,44 +214,6 @@ def _get_factFromUnit(self): fact = 3600. return fact - # ===================================================================== - # ZOOMING - # ===================================================================== - def _fcn_Zooming(self): - """Apply dynamic zoom on hypnogram.""" - # Hypnogram : - if self._PanHypZoom.isChecked(): - self._PanHypIndic.setEnabled(False) - self._hypInd.mesh.visible = False - else: - self._PanHypIndic.setEnabled(True) - self._hypcam.rect = (self._time.min(), -5., - self._time.max() - self._time.min(), 7.) - self._hypInd.mesh.visible = self._PanHypIndic.isChecked() - - # Spectrogram : - if self._PanSpecZoom.isChecked(): - self._PanSpecIndic.setEnabled(False) - self._specInd.mesh.visible = False - else: - self._PanSpecIndic.setEnabled(True) - self._speccam.rect = (self._time.min(), self._spec.freq[0], - self._time.max() - self._time.min(), - self._spec.freq[-1] - self._spec.freq[0]) - self._specInd.mesh.visible = self._PanSpecIndic.isChecked() - # Time axis : - if self._PanTimeZoom.isChecked(): - # self._PanTimeIndic.setChecked(False) - self._PanTimeIndic.setEnabled(False) - self._TimeAxis.mesh.visible = False - else: - self._PanTimeIndic.setEnabled(True) - self._timecam.rect = (self._time.min(), 0., - self._time.max() - self._time.min(), 1.) - self._TimeAxis.mesh.visible = self._PanTimeIndic.isChecked() - - self._fcn_sliderSettings() - def on_mouse_wheel(self, event): """Executed function on mouse wheel.""" self._SlVal.setValue(self._SlVal.value() + event.delta[1]) diff --git a/visbrain/sleep/interface/uiElements/uiTools.py b/visbrain/sleep/interface/uiElements/uiTools.py index 255b4e73c..5e0a3a481 100644 --- a/visbrain/sleep/interface/uiElements/uiTools.py +++ b/visbrain/sleep/interface/uiElements/uiTools.py @@ -1,7 +1,7 @@ """Main class for sleep tools managment.""" import numpy as np -from PyQt4 import QtGui +from PyQt5 import QtWidgets from ....utils import (rereferencing, bipolarization, find_nonEEG, commonaverage, id) @@ -24,7 +24,7 @@ def __init__(self): for i, k in enumerate(self._channels): if not self._noneeg[i]: # Add a checkbox to the scrolling panel : - box = QtGui.QCheckBox(self._PanScrollChan) + box = QtWidgets.QCheckBox(self._PanScrollChan) # Name checkbox with channel name : box.setText(k) # Get it : diff --git a/visbrain/sleep/interface/uiInit.py b/visbrain/sleep/interface/uiInit.py index 1c035e095..d9fd84938 100644 --- a/visbrain/sleep/interface/uiInit.py +++ b/visbrain/sleep/interface/uiInit.py @@ -7,7 +7,7 @@ """ import numpy as np -from PyQt4 import QtGui +from PyQt5 import QtWidgets from vispy import app, scene import vispy.visuals.transforms as vist @@ -17,7 +17,7 @@ __all__ = ['uiInit'] -class uiInit(QtGui.QMainWindow, Ui_MainWindow, app.Canvas): +class uiInit(QtWidgets.QMainWindow, Ui_MainWindow, app.Canvas): """Group and initialize the graphical elements and interactions.""" def __init__(self): diff --git a/visbrain/sleep/sleep.py b/visbrain/sleep/sleep.py index 692ea4e3a..7f57b7291 100644 --- a/visbrain/sleep/sleep.py +++ b/visbrain/sleep/sleep.py @@ -2,7 +2,7 @@ import numpy as np import sip -from PyQt4 import QtGui +from PyQt5 import QtGui, QtWidgets import sys import os from warnings import warn @@ -13,8 +13,9 @@ from .interface import uiInit, uiElements from .visuals import visuals from .tools import Tools -from ..utils import (FixedCam, load_sleepdataset, load_hypno, color2vb, - ShortcutPopup, check_downsampling) +from ..utils import (FixedCam, load_sleepdataset, color2vb, ShortcutPopup, + check_downsampling) +from ..io import dialogLoad, read_hypno sip.setdestroyonexit(False) @@ -23,12 +24,14 @@ class Sleep(uiInit, visuals, uiElements, Tools): """Visualize and edit sleep data. Use this module to : - - Load .eeg (Brainvision and ELAN), .edf or directly raw data. - - Visualize polysomnographic data, spectrogram - - Load, edit and save hypnogram from the interface - - Perform several events detection - - Further signal processing tools (de-mean, de-trend and filtering) - - Topographic data visualization + + * Load .eeg (Brainvision and ELAN), .edf or directly raw data. + * Visualize polysomnographic data, spectrogram + * Load, edit and save hypnogram from the interface + * Perform several events detection + * Further signal processing tools (de-mean, de-trend and filtering) + * Topographic data visualization + Sleep has been developped in collaboration with Raphael Vallat. Kargs: @@ -65,7 +68,7 @@ class Sleep(uiInit, visuals, uiElements, Tools): 'agg' for smooth lines. This option might not works on some plateforms. - hypedit: bool, optional, (def: False) + hedit: bool, optional, (def: False) Enable the drag and drop hypnogram edition. href: list, optional, (def: ['art', 'wake', 'rem', 'n1', 'n2', 'n3']) @@ -75,12 +78,12 @@ class Sleep(uiInit, visuals, uiElements, Tools): def __init__(self, file=None, hypno_file=None, config_file=None, data=None, channels=None, sf=None, hypno=None, - downsample=100., axis=False, line='gl', hypedit=False, + downsample=100., axis=False, line='gl', hedit=False, href=['art', 'wake', 'rem', 'n1', 'n2', 'n3']): """Init.""" # ====================== APP CREATION ====================== # Create the app and initialize all graphical elements : - self._app = QtGui.QApplication(sys.argv) + self._app = QtWidgets.QApplication(sys.argv) uiInit.__init__(self) # Shortcuts popup window : @@ -95,18 +98,15 @@ def __init__(self, file=None, hypno_file=None, config_file=None, # --------------- Qt Dialog --------------- if (file is None) or not isinstance(file, str): # Dialog window for the main dataset : - file = QtGui.QFileDialog.getOpenFileName( - self, "Open dataset", "", "BrainVision /Elan (*.eeg);;" - "Edf (*.edf);;Micromed (*.trc)") - file = str(file) # py2 + file = dialogLoad(self, "Open dataset", '', + "BrainVision/Elan (*.eeg);;Edf (*.edf);;" + "Micromed (*.trc);;All files (*.*)") # Get the user path : upath = os.path.split(file)[0] # Dialog window for hypnogram : - hypno_file = QtGui.QFileDialog.getOpenFileName( - self, "Open hypnogram", upath, "Elan (*.hyp);;" - "Text file (*.txt);;""CSV file (*.csv);;All files " - "(*.*)") - hypno_file = str(hypno_file) # py2 + hypno_file = dialogLoad(self, "Open hypnogram", upath, + "Elan (*.hyp);;Text file (*.txt);;" + "CSV file (*.csv);;All files (*.*)") # Load dataset : sf, downsample, data, channels, N, start_time = load_sleepdataset( @@ -122,7 +122,7 @@ def __init__(self, file=None, hypno_file=None, config_file=None, # Load hypnogram : if hypno_file: # Load the hypnogram : - hypno = load_hypno(hypno_file, npts) + hypno = read_hypno(hypno_file, npts) # Change the sampling frequency if down-sample : if downsample is not None: @@ -142,6 +142,7 @@ def __init__(self, file=None, hypno_file=None, config_file=None, # ====================== VARIABLES ====================== # Check all data : self._file = file + self._config_file = config_file (self._sf, self._data, self._hypno, self._time, self._href, self._hconv) = self._check_data(sf, data, channels, hypno, downsample, time, href) @@ -149,7 +150,7 @@ def __init__(self, file=None, hypno_file=None, config_file=None, self._channels = [k.strip().replace(' ', '').split('.')[ 0] for k in channels] self._ax = axis - self._enabhypedit = hypedit + self._enabhypedit = hedit # ---------- Default line width ---------- self._linemeth = line self._lw = 1. @@ -204,8 +205,7 @@ def __init__(self, file=None, hypno_file=None, config_file=None, self._fcnsOnCreation() # Load config file - if config_file: - self._config_file = config_file + if self._config_file is not None: self.loadConfig() def __len__(self): @@ -399,10 +399,10 @@ def _camCreation(self): self._topocam, self._timecam) def _fcnsOnCreation(self): - """Functions that need to be applied on creation.""" + """Applied on creation.""" self._fcn_sliderMove() self._chanChecks[0].setChecked(True) - self._hypLabel.setVisible(self._PanHypViz.isChecked()) + self._hypLabel.setVisible(self.menuDispHypno.isChecked()) self._fcn_chanViz() self._fcn_chanSymAmp() self._fcn_infoUpdate() diff --git a/visbrain/sleep/tools/tools.py b/visbrain/sleep/tools/tools.py index 7b8b173ac..ba0d732c6 100644 --- a/visbrain/sleep/tools/tools.py +++ b/visbrain/sleep/tools/tools.py @@ -274,8 +274,6 @@ def time_update(): self.event = MouseEmulation() # ============ MARKERS POSITION ============ - # data = hypno_obj.mesh.pos[:, 1] - # time = hypno_obj.mesh.pos[:, 0] self.convert = hypno_obj.pos2GUI self._transient(data, time) diff --git a/visbrain/sleep/visuals/visuals.py b/visbrain/sleep/visuals/visuals.py index ddd8b2c35..b37d42b10 100644 --- a/visbrain/sleep/visuals/visuals.py +++ b/visbrain/sleep/visuals/visuals.py @@ -70,7 +70,7 @@ def __iter__(self): yield k def __bool__(self): - pass + return any([bool(self[k]['index'].size) for k in self]) def __setitem__(self, key, value): self.dict[key] = value @@ -160,6 +160,8 @@ def delete(self, chan, types): else: self.line[(chan, types)].set_data(pos=pos, connect=np.array([False])) + # Remove data from hypnogram : + self.hyp.set_data(pos=pos) def nonzero(self): """Return the list of channels with non-empty detections.""" @@ -539,7 +541,7 @@ def __init__(self, time, camera, color='darkblue', width=2., parent=None, # Create a default marker (for edition): self.edit = Markers(parent=parent) # self.mesh.set_gl_state('translucent', depth_test=True) - self.mesh.set_gl_state('translucent') + self.edit.set_gl_state('translucent') # Add grid : self.grid = scene.visuals.GridLines(color=(.7, .7, .7, 1.), scale=(30.*time[-1]/len(time), 1.), @@ -576,7 +578,10 @@ def set_data(self, sf, data, time, convert=True): # Build color array : color = np.zeros((len(data), 4), dtype=np.float32) for k, v in zip(self.color.keys(), self.color.values()): + # Set the stage color : color[data == k, :] = v + # Avoid gradient color : + color[1::, :] = color[0:-1, :] # Set data to the mesh : self.mesh.set_data(pos=np.vstack((time, -data)).T, width=self.width, color=color) @@ -671,24 +676,14 @@ def pos2GUIinv(self, pos): elif isinstance(pos, (int, float)): return -self._hconvinv[-int(pos)] - def clean(self): + def clean(self, sf, time): """Clean indicators.""" - pos = np.zeros((1, 3), dtype=np.float32) # Mesh : - self.mesh.set_data(pos=pos, color='gray') - self.mesh.parent = None - self.mesh = None + posmesh = np.zeros((len(self),), dtype=np.float32) + self.set_data(sf, posmesh, time) # Edit : - self.edit.set_data(pos=pos, face_color='gray') - self.edit.parent = None - self.edit = None - # Report : - self.report.set_data(pos=pos, face_color='gray') - self.report.parent = None - self.report = None - # Grid : - self.grid.parent = None - self.grid = None + posedit = np.full((1, 3), -10., dtype=np.float32) + self.edit.set_data(pos=posedit, face_color='gray') # ----------- RECT ----------- @property @@ -771,14 +766,18 @@ def __init__(self, canvas): ('s', 'Display / hide spectrogram'), ('t', 'Display / hide topoplot'), ('h', 'Display / hide hypnogram'), - ('p', 'Display / disable time bar'), + ('p', 'Display / hide navigation bar'), + ('x', 'Display / hide time axis'), + ('g', 'Display / hide time grid'), ('z', 'Enable / disable zooming'), + ('i', 'Enable / disable indicators'), ('a', 'Scoring: set current window to Art (-1)'), ('w', 'Scoring: set current window to Wake (0)'), ('1', 'Scoring: set current window to N1 (1)'), ('2', 'Scoring: set current window to N2 (2)'), ('3', 'Scoring: set current window to N3 (3)'), ('r', 'Scoring: set current window to REM (4)'), + ('CTRL + Num', 'Display the channel Num'), ('CTRL + s', 'Save hypnogram'), ('CTRL + t', 'Display shortcuts'), ('CTRL + e', 'Display documentation'), @@ -796,6 +795,7 @@ def on_key_press(event): """ if event.text == ' ': pass + # ------------ SLIDER ------------ elif event.text.lower() == 'n': # Next (slider) self._SlGoto.setValue( @@ -813,35 +813,17 @@ def on_key_press(event): self._PanAmpSym.setChecked(True) self._PanAllAmpMax.setValue(self._PanAllAmpMax.value() - 5.) - # ------------ VISIBILITY ------------ - elif event.text.lower() == 's': # Toggle visibility on spec - self._PanSpecViz.setChecked(not self._PanSpecViz.isChecked()) - self._fcn_specViz() - - elif event.text.lower() == 'h': # Toggle visibility on hypno - self._PanHypViz.setChecked(not self._PanHypViz.isChecked()) - self._fcn_hypViz() - - elif event.text.lower() == 'p': # Toggle visibility time bar - self._slFrame.hide() if self._slFrame.isVisible( - ) else self._slFrame.show() - - elif event.text.lower() == 't': # Toggle visibility on topo - self._PanTopoViz.setChecked(not self._PanTopoViz.isChecked()) - self._fcn_topoViz() - - elif event.text.lower() == 'z': # Enable zoom - viz = self._PanTimeZoom.isChecked() - self._PanTimeZoom.setChecked(not viz) - self._PanHypZoom.setChecked(not viz) - self._PanSpecZoom.setChecked(not viz) - self._fcn_Zooming() - - elif event.text.lower() == 'm': + # ------------ GRID/MAGNIFY ------------ + elif event.text.lower() == 'm': # Magnify viz = self._slMagnify.isChecked() self._slMagnify.setChecked(not viz) self._fcn_sliderMagnify() + elif event.text.lower() == 'g': # Grid + viz = self._slGrid.isChecked() + self._slGrid.setChecked(not viz) + self._fcn_gridToggle() + # ------------ SCORING ------------ elif event.text.lower() == 'a': self._add_stage_on_win(-1) diff --git a/visbrain/utils/popup.py b/visbrain/utils/popup.py index 164d3680b..36b36e04b 100644 --- a/visbrain/utils/popup.py +++ b/visbrain/utils/popup.py @@ -1,13 +1,13 @@ """Create basic popup.""" -from PyQt4.Qt import * -from PyQt4 import QtGui +from PyQt5.Qt import * +from PyQt5 import QtWidgets __all__ = ['ShortcutPopup'] def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) + return QtWidgets.QApplication.translate(context, text, disambig, _encoding) class ShortcutPopup(QWidget): @@ -17,14 +17,14 @@ def __init__(self): """Init.""" QWidget.__init__(self) self.setGeometry(QRect(400, 200, 700, 600)) - layout = QtGui.QGridLayout(self) - self.table = QtGui.QTableWidget() + layout = QtWidgets.QGridLayout(self) + self.table = QtWidgets.QTableWidget() self.table.setColumnCount(2) self.table.horizontalHeader().setStretchLastSection(True) self.table.verticalHeader().setStretchLastSection(False) layout.addWidget(self.table) # Add column names : - item = QtGui.QTableWidgetItem() + item = QtWidgets.QTableWidgetItem() self.table.setHorizontalHeaderItem(0, item) item = self.table.horizontalHeaderItem(0) item.setText("Keys") @@ -36,5 +36,5 @@ def set_shortcuts(self, shdic): """Fill table.""" self.table.setRowCount(len(shdic)) for num, k in enumerate(shdic): - self.table.setItem(num, 0, QtGui.QTableWidgetItem(k[0])) - self.table.setItem(num, 1, QtGui.QTableWidgetItem(k[1])) + self.table.setItem(num, 0, QtWidgets.QTableWidgetItem(k[0])) + self.table.setItem(num, 1, QtWidgets.QTableWidgetItem(k[1])) diff --git a/visbrain/utils/sleep/__init__.py b/visbrain/utils/sleep/__init__.py index bb2e75b22..574dcc7da 100644 --- a/visbrain/utils/sleep/__init__.py +++ b/visbrain/utils/sleep/__init__.py @@ -1,4 +1,3 @@ from .detection import * from .fileconvert import * from .hypnoprocessing import * -from .fileexport import * diff --git a/visbrain/utils/sleep/edf.py b/visbrain/utils/sleep/edf.py index ad1aaf76d..ff11fd2f0 100644 --- a/visbrain/utils/sleep/edf.py +++ b/visbrain/utils/sleep/edf.py @@ -9,15 +9,14 @@ """ from logging import getLogger -lg = getLogger(__name__) -from datetime import datetime, timedelta +from datetime import datetime from math import floor from re import findall -from struct import pack - from numpy import empty, asarray, fromstring, iinfo, abs, max + +lg = getLogger(__name__) EDF_FORMAT = 'int16' # by definition edf_iinfo = iinfo(EDF_FORMAT) DIGITAL_MAX = edf_iinfo.max @@ -47,6 +46,7 @@ class Edf: """ def __init__(self, edffile): + """Init.""" if isinstance(edffile, str): self.filename = edffile self._read_hdr() @@ -55,9 +55,7 @@ def _read_hdr(self): """Read header from EDF file. It only reads the header for internal purposes and adds a hdr. - """ - with open(self.filename, 'rb') as f: hdr = {} @@ -123,20 +121,18 @@ def return_hdr(self): number of samples in the dataset orig : dict additional information taken directly from the header - """ - subj_id = self.hdr['subject_id'] start_time = self.hdr['start_time'] - + # Check that all channels have the same sampling rate - #_assert_all_the_same(self.hdr['n_samples_per_record']) - + # _assert_all_the_same(self.hdr['n_samples_per_record']) + s_freq = (self.hdr['n_samples_per_record'][0] / self.hdr['record_length']) - + chan_name = self.hdr['label'] - + n_samples = (self.hdr['n_samples_per_record'][0] * self.hdr['n_records']) @@ -161,9 +157,7 @@ def _read_dat(self, i_chan, begsam, endsam): ------- numpy.ndarray A vector with the data as written on file, in 16-bit precision - """ - assert begsam < endsam begsam = float(begsam) @@ -225,7 +219,6 @@ def return_dat(self, chan, begsam, endsam): numpy.ndarray A 2d matrix, where the first dimension is the channels and the second dimension are the samples. - """ hdr = self.hdr dig_min = hdr['digital_min'] @@ -233,8 +226,8 @@ def return_dat(self, chan, begsam, endsam): phys_range = hdr['physical_max'] - hdr['physical_min'] dig_range = hdr['digital_max'] - hdr['digital_min'] - #assert all(phys_range > 0) - #assert all(dig_range > 0) + # assert all(phys_range > 0) + # assert all(dig_range > 0) gain = phys_range / dig_range diff --git a/visbrain/utils/sleep/fileconvert.py b/visbrain/utils/sleep/fileconvert.py index 221050c81..54012a26f 100644 --- a/visbrain/utils/sleep/fileconvert.py +++ b/visbrain/utils/sleep/fileconvert.py @@ -7,12 +7,10 @@ import numpy as np import os import datetime -from warnings import warn from ..others import check_downsampling -__all__ = ['load_sleepdataset', 'load_hypno', 'save_hypnoToElan', - 'save_hypnoTotxt'] +__all__ = ['load_sleepdataset'] def load_sleepdataset(path, downsample=None): @@ -85,212 +83,6 @@ def load_sleepdataset(path, downsample=None): raise ValueError("*" + ext + " files are currently not supported.") -def load_hypno(path, npts): - """Load hypnogram file. - - Sleep stages in the hypnogram should be scored as follow - see Iber et al. 2007 - - Wake: 0 - N1: 1 - N2: 2 - N3: 3 - REM: 4 - Art: -1 (optional) - - Args: - path: string - Filename (with full path) to hypnogram file. - - npts: int - Data length. - - Return: - hypno: np.ndarray - The hypnogram vector with same length as downsampled data. - """ - # Test if file exist : - assert os.path.isfile(path) - - # Extract file extension : - file, ext = os.path.splitext(path) - - # Try loading file : - try: - if ext in ['.hyp', '.txt', '.csv']: - # ----------- ELAN ----------- - if ext == '.hyp': - hypno = elan_hyp(path, npts) - - # ----------- TXT / CSV ----------- - elif ext in ['.txt', '.csv']: - hypno = txt_hyp(path, npts) - - # Complete hypnogram if needed : - n = len(hypno) - if n < npts: - hypno = np.append(hypno, hypno[-1]*np.ones((npts-n,))) - elif n > npts: - raise ValueError("The length of the hypnogram \ - vector must be" + str(npts) + - " (Currently : " + str(n) + ".") - - return hypno - - except: - warn("\nAn error ocurred while trying to load the hypnogram. An empty" - " one will be used instead.") - return None - - -def elan_hyp(path, npts): - """Read Elan hypnogram (hyp). - - Args: - path: str - Filename(with full path) to Elan .hyp file - - npts: int - Data length. - - Return: - hypno: np.ndarray - The hypnogram vector with same length as downsampled data. - - """ - hyp = np.genfromtxt(path, delimiter='\n', usecols=[0], - dtype=None, skip_header=0) - - hyp = np.char.decode(hyp) - - # Sampling rate of original .eeg file - # sf = 1 / float(hyp[1].split()[1]) - - # Extract hypnogram values - hypno = np.array(hyp[4:], dtype=np.int) - - # Replace values according to Iber et al 2007 - hypno[hypno == -2] = -1 - hypno[hypno == 4] = 3 - hypno[hypno == 5] = 4 - - # Get the repetition number : - rep = int(np.floor(npts/len(hypno))) - - # Resample to get same number of points as in eeg file - hypno = np.repeat(hypno, rep) - - return hypno - - -def txt_hyp(path, npts): - """Read text files (.txt / .csv) hypnogram. - - Args: - path: str - Filename(with full path) to hypnogram(.txt) - - npts: int - Data length. - - Return: - hypno: np.ndarray - The hypnogram vector with same length as downsampled data. - - """ - assert os.path.isfile(path) - - file, ext = os.path.splitext(path) - - header = file + '_description.txt' - assert os.path.isfile(header) - - # Load header file - labels = np.genfromtxt(header, dtype=str, delimiter=" ", usecols=0) - values = np.genfromtxt(header, dtype=int, delimiter=" ", usecols=1) - desc = {label: row for label, row in zip(labels, values)} - - # Load hypnogram file - hyp = np.genfromtxt(path, delimiter='\n', usecols=[0], - dtype=None, skip_header=0) - - if not np.issubdtype(hyp.dtype, np.integer): - hyp = np.char.decode(hyp) - hypno = np.array([s for s in hyp if s.lstrip('-').isdigit()], - dtype=int) - else: - hypno = hyp.astype(int) - - hypno = swap_hyp_values(hypno, desc) - - # Get the repetition number : - rep = int(np.floor(npts/len(hypno))) - - # Resample to get same number of points as in eeg file - hypno = np.repeat(hypno, rep) - - return hypno - - -def swap_hyp_values(hypno, desc): - """Swap values in hypnogram vector. - - Sleep stages in the hypnogram should be scored as follow - see Iber et al. 2007 - - Args: - hypno: np.ndarray - The hypnogram vector - - description: str - Path to a .txt file containing labels and values of each sleep - stage separated by a space - - Return: - hypno_s: np.ndarray - Hypnogram with swapped values - - e.g from the DREAM bank EDF database - Stage Orig. val New val - W 5 0 - N1 3 1 - N2 2 2 - N3 1 3 - REM 0 4 - """ - # Swap values - hypno_s = -1 * np.ones(shape=(hypno.shape), dtype=int) - - if 'Art' in desc: - hypno_s[hypno == desc['Art']] = -1 - - if 'Nde' in desc: - hypno_s[hypno == desc['Nde']] = -1 - - if 'Mt' in desc: - hypno_s[hypno == desc['Mt']] = -1 - - if 'W' in desc: - hypno_s[hypno == desc['W']] = 0 - - if 'N1' in desc: - hypno_s[hypno == desc['N1']] = 1 - - if 'N2' in desc: - hypno_s[hypno == desc['N2']] = 2 - - if 'N3' in desc: - hypno_s[hypno == desc['N3']] = 3 - - if 'N4' in desc: - hypno_s[hypno == desc['N4']] = 3 - - if 'REM' in desc: - hypno_s[hypno == desc['REM']] = 4 - - return hypno_s - - def elan2array(path, downsample=None): """Read Elan eeg file into NumPy. @@ -706,80 +498,3 @@ def read_f(f, fmt): ds = 1 return sf, downsample, data[:, ::ds], list(chan), N, start_time - - -def save_hypnoToElan(filename, hypno, sf, sfori, N): - """Save hypnogram in Elan file format (*.hyp). - - Args: - filename: str - Filename (with full path) of the file to save - - hypno: np.ndarray - Hypnogram array, same length as data - - sf: int - Sampling frequency of the data (after downsampling) - - sfori: int - Original sampling rate of the raw data - - N: int - Original number of points in the raw data - """ - # Check data format - sf = int(sf) - hypno = hypno.astype(int) - hypno[hypno == 4] = 5 - step = int(hypno.shape / np.round(N / sfori)) - - hdr = np.array([['time_base 1.000000'], - ['sampling_period ' + str(np.round(1/sfori, 8))], - ['epoch_nb ' + str(int(N / sfori))], - ['epoch_list']]).flatten() - - # Save - export = np.append(hdr, hypno[::step].astype(str)) - np.savetxt(filename, export, fmt='%s') - - -def save_hypnoTotxt(filename, hypno, sf, sfori, N, window=1.): - """Save hypnogram in txt file format (*.txt). - - Header is in file filename_description.txt - - Args: - filename: str - Filename (with full path) of the file to save - - hypno: np.ndarray - Hypnogram array, same length as data - - sf: float - Sampling frequency of the data (after downsampling) - - sfori: int - Original sampling rate of the raw data - - N: int - Original number of points in the raw data - - Kargs: - window: float, optional, (def 1) - Time window (second) of each point in the hypno - Default is one value per second - (e.g. window = 30 = 1 value per 30 second) - """ - base = os.path.basename(filename) - dirname = os.path.dirname(filename) - descript = os.path.join(dirname, - os.path.splitext(base)[0] + '_description.txt') - - # Save hypno - step = int(hypno.shape / np.round(N / sfori)) - np.savetxt(filename, hypno[::step].astype(int), fmt='%s') - - # Save header file - hdr = np.array([['time ' + str(window)], ['W 0'], ['N1 1'], ['N2 2'], - ['N3 3'], ['REM 4'], ['Art -1']]).flatten() - np.savetxt(descript, hdr, fmt='%s') diff --git a/visbrain/utils/sleep/fileexport.py b/visbrain/utils/sleep/fileexport.py deleted file mode 100644 index ac574af22..000000000 --- a/visbrain/utils/sleep/fileexport.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Export data into *.txt, *.csv files.""" - -import csv - -__all__ = ['listToCsv', 'listToTxt'] - - -def listToCsv(file, data): - """Write a csv file. - - Args: - file: string - File name for saving file. - - data: list - List of data to save to the csv file. - """ - with open(file, 'w') as csvfile: - writer = csv.writer(csvfile, dialect='excel', delimiter=',') - for k in data: - writer.writerow(k) - return - - -def listToTxt(file, data): - """Write a txt file. - - Args: - file: string - File name for saving file. - - data: list - List of data to save to the txt file. - """ - # Open file : - ofile = open(file, 'w') - for k in data: - ofile.write("%s\n" % ', '.join(k)) - return diff --git a/visbrain/utils/sleep/hypnoprocessing.py b/visbrain/utils/sleep/hypnoprocessing.py index a8731d507..46515ec28 100644 --- a/visbrain/utils/sleep/hypnoprocessing.py +++ b/visbrain/utils/sleep/hypnoprocessing.py @@ -3,7 +3,7 @@ import numpy as np from os import path -__all__ = ['sleepstats', 'transient', 'save_hypnoToFig'] +__all__ = ['sleepstats', 'transient'] def transient(data, xvec=None): @@ -159,104 +159,3 @@ def sleepstats(file, hypno, N, sf=100., sfori=1000., time_window=30.): # stats['%REM_23'] = stats['REM_9'] / stats['TDT_3'] * 100. return stats - - -def save_hypnoToFig(file, hypno, sf, tstartsec, grid=False): - """Export hypnogram to a 600 dpi .png figure - - Args: - file: str - Filename (with full path) to sleep dataset. - - hypno: np.ndarray - Hypnogram vector - - sf: float, optional, (def: 100.) - The sampling frequency of displayed elements (could be the - down-sampling frequency) - - tstartsec: int - Record starting time given in seconds. - - Kargs: - grid: boolean, optional (def False) - Plot X and Y grid. - """ - import matplotlib.pyplot as plt - import datetime - - # Downsample to get one value per second - sf = int(sf) - hypno = hypno[::sf] - - # Put REM between Wake and N1 sleep - hypno[hypno >= 1] += 1 - hypno[hypno == 5] = 1 - idxREM = np.where(hypno == 1)[0] - valREM = np.zeros(hypno.size) - valREM[:] = np.nan - valREM[idxREM] = 1 - - # Find if artefacts are present in hypno - art = True if -1 in hypno else False - - # Start plotting - fig, ax = plt.subplots(figsize=(10, 4), edgecolor='k') - lhyp = len(hypno) / 60 - lw = 1.5 - if lhyp < 60: - xticks = np.arange(0, len(hypno), 10 * 60) - lw = 2 - elif lhyp < 180 and lhyp > 60: - xticks = np.arange(0, len(hypno), 30 * 60) - else: - xticks = np.arange(0, len(hypno), 60 * 60) - - xticks = np.append(xticks, len(hypno)) - xlabels = (xticks + tstartsec).astype(int) - xlabels_str = [str(datetime.timedelta(seconds=int(j)))[:-3] - for i, j in enumerate(xlabels)] - xlabels_str = [s.replace('1 day, ', '') for s in xlabels_str] - plt.xlim(0, len(hypno)) - plt.xticks(xticks, xlabels_str) - plt.plot(hypno, 'k', ls='steps', linewidth=lw) - - # Plot REM epochs - for i in np.arange(0.6, 1, 0.01): - plt.plot(np.arange(len(hypno)), i * valREM, 'k', linewidth=lw) - - # Y-Ticks and Labels - if art: - ylabels = ['Art', 'Wake', 'REM', 'N1', 'N2', 'N3'] - plt.yticks([-1, 0, 1, 2, 3, 4], ylabels) - plt.ylim(-1.5, 4.5) - else: - ylabels = ['', 'Wake', 'REM', 'N1', 'N2', 'N3'] - plt.yticks([-0.5, 0, 1, 2, 3, 4], ylabels) - plt.ylim(-.5, 4.5) - - # X-Ticks and Labels - plt.xlabel("Time") - plt.ylabel("Sleep Stage") - - # Grid - if grid: - plt.grid(True, 'major', ls=':', lw=.2, c='k', alpha=.3) - - plt.tick_params(axis='both', which='both', bottom='on', top='off', - labelbottom='on', left='on', right='off', labelleft='on', - labelcolor='k', direction='out') - - # Invert Y axis and despine - ax.invert_yaxis() - ax.spines['right'].set_visible(False) - ax.spines['top'].set_visible(False) - ax.spines['left'].set_visible(True) - ax.spines['bottom'].set_visible(True) - - ax.spines['left'].set_position(('outward', 10)) - ax.spines['bottom'].set_position(('outward', 10)) - ax.spines['bottom'].set_smart_bounds(True) - - # Save as 600 dpi .png - plt.savefig(file, format='png', dpi=600, bbox_inches='tight')