Changeset 570e091 in sasview


Ignore:
Timestamp:
Jan 10, 2018 5:45:43 AM (4 years ago)
Author:
Piotr Rozyczko <rozyczko@…>
Branches:
ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
Children:
676f137
Parents:
e147ce2 (diff), a3c94b54 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'ESS_GUI_cns' of https://github.com/SasView/sasview into ESS_GUI_cns

Files:
2 added
33 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/GUITests.py

    r0595bb7 r570e091  
    6060#  Invariant 
    6161from Perspectives.Invariant.UnitTesting import InvariantPerspectiveTest 
    62 from Perspectives.Invariant.UnitTesting import InvariantDetailsTest 
    6362 
    6463def suite(): 
  • docs/sphinx-docs/build_sphinx.py

    rdf72475 re90988c  
    220220    print("=== Build HTML Docs from ReST Files ===") 
    221221    subprocess.call(["sphinx-build", 
    222                      "-b", "html", # Builder name. TODO: accept as arg to setup.py. 
     222                     "-b", "qthelp", # Builder name. TODO: accept as arg to setup.py. 
    223223                     "-d", joinpath(SPHINX_BUILD, "doctrees"), 
    224224                     SPHINX_SOURCE, 
  • src/sas/qtgui/Calculators/DataOperationUtilityPanel.py

    rd6b8a1d re90988c  
    110110        documentation tree (after /doc/ ....". 
    111111        """ 
    112         try: 
    113             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    114                        "/user/sasgui/perspectives/calculator/data_operator_help.html" 
    115             self.manager._helpView.load(QtCore.QUrl(location)) 
    116             self.manager._helpView.show() 
    117  
    118         except AttributeError: 
    119             # No manager defined - testing and standalone runs 
    120             pass 
     112        location = "/user/sasgui/perspectives/calculator/data_operator_help.html" 
     113        self.manager.showHelp(location) 
    121114 
    122115    def onClose(self): 
  • src/sas/qtgui/Calculators/DensityPanel.py

    rd4881f6a re90988c  
    146146 
    147147    def displayHelp(self): 
    148         try: 
    149             location = HELP_DIRECTORY_LOCATION + \ 
    150                 "/user/sasgui/perspectives/calculator/density_calculator_help.html" 
     148        location =  "/user/sasgui/perspectives/calculator/density_calculator_help.html" 
     149        self.manager.showHelp(location) 
    151150 
    152             self.manager._helpView.load(QtCore.QUrl(location)) 
    153             self.manager._helpView.show() 
    154         except AttributeError: 
    155             # No manager defined - testing and standalone runs 
    156             pass 
     151 
  • src/sas/qtgui/Calculators/GenericScatteringCalculator.py

    r53c771e re90988c  
    382382        documentation tree (after /doc/ ....". 
    383383        """ 
    384         try: 
    385             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    386                        "/user/sasgui/perspectives/calculator/sas_calculator_help.html" 
    387             self.manager._helpView.load(QtCore.QUrl(location)) 
    388             self.manager._helpView.show() 
    389         except AttributeError: 
    390             # No manager defined - testing and standalone runs 
    391             pass 
     384        location = "/user/sasgui/perspectives/calculator/sas_calculator_help.html" 
     385        self.manager.showHelp(location) 
    392386 
    393387    def onReset(self): 
  • src/sas/qtgui/Calculators/KiessigPanel.py

    rfbfc488 re90988c  
    3838        documentation tree (after /doc/ ....". 
    3939        """ 
    40         try: 
    41             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    42                 "/user/sasgui/perspectives/calculator/kiessig_calculator_help.html" 
    43  
    44             self.manager._helpView.load(QtCore.QUrl(location)) 
    45             self.manager._helpView.show() 
    46         except AttributeError: 
    47             # No manager defined - testing and standalone runs 
    48             pass 
     40        location = "/user/sasgui/perspectives/calculator/kiessig_calculator_help.html" 
     41        self.manager.showHelp(location) 
    4942 
    5043    def onCompute(self): 
  • src/sas/qtgui/Calculators/ResolutionCalculatorPanel.py

    rd6b8a1d re90988c  
    366366        documentation tree (after /doc/ ....". 
    367367        """ 
    368         try: 
    369             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    370                        "/user/sasgui/perspectives/calculator/resolution_calculator_help.html" 
    371             self.manager._helpView.load(QtCore.QUrl(location)) 
    372             self.manager._helpView.show() 
    373  
    374         except AttributeError: 
    375             # No manager defined - testing and standalone runs 
    376             pass 
     368        location = "/user/sasgui/perspectives/calculator/resolution_calculator_help.html" 
     369        self.manager.showHelp(location) 
    377370 
    378371    def onReset(self): 
  • src/sas/qtgui/Calculators/SldPanel.py

    rd4881f6a re90988c  
    213213 
    214214    def displayHelp(self): 
    215         try: 
    216             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    217                 "/user/sasgui/perspectives/calculator/sld_calculator_help.html" 
    218             self.manager._helpView.load(QtCore.QUrl(location)) 
    219             self.manager._helpView.show() 
    220         except AttributeError: 
    221             # No manager defined - testing and standalone runs 
    222             pass 
    223  
     215        location = "/user/sasgui/perspectives/calculator/sld_calculator_help.html" 
     216        self.manager.showHelp(location) 
     217 
     218 
  • src/sas/qtgui/Calculators/SlitSizeCalculator.py

    r53c771e re90988c  
    4747        documentation tree (after /doc/ ....". 
    4848        """ 
    49         try: 
    50             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    51                 "/user/sasgui/perspectives/calculator/slit_calculator_help.html" 
    52  
    53             self._parent._helpView.load(QtCore.QUrl(location)) 
    54             self._parent._helpView.show() 
    55         except AttributeError: 
    56             # No manager defined - testing and standalone runs 
    57             pass 
     49        location = "/user/sasgui/perspectives/calculator/slit_calculator_help.html" 
     50        self._parent.showHelp(location) 
    5851 
    5952    def onBrowse(self): 
  • src/sas/qtgui/Calculators/UnitTesting/DataOperationUtilityTest.py

    r53c771e re90988c  
    44import logging 
    55import unittest 
     6import webbrowser 
     7 
    68from PyQt5 import QtGui, QtWidgets 
    79from PyQt5 import QtCore 
     
    119121    def testHelp(self): 
    120122        """ Assure help file is shown """ 
    121         # this should not rise 
     123        self.widget.manager.showHelp = MagicMock() 
    122124        self.widget.onHelp() 
     125        self.assertTrue(self.widget.manager.showHelp.called_once()) 
     126        args = self.widget.manager.showHelp.call_args 
     127        self.assertIn('data_operator_help.html', args[0][0]) 
    123128 
    124129    def testOnReset(self): 
  • src/sas/qtgui/Calculators/UnitTesting/DensityCalculatorTest.py

    r53c771e re90988c  
    121121    def testHelp(self): 
    122122        """ Assure help file is shown """ 
    123  
    124         # this should not rise 
     123        self.widget.manager = QtWidgets.QWidget() 
     124        self.widget.manager.showHelp = MagicMock() 
    125125        self.widget.displayHelp() 
     126        self.assertTrue(self.widget.manager.showHelp.called_once()) 
     127        args = self.widget.manager.showHelp.call_args 
     128        self.assertIn('density_calculator_help.html', args[0][0]) 
    126129 
    127130if __name__ == "__main__": 
  • src/sas/qtgui/Calculators/UnitTesting/GenericScatteringCalculatorTest.py

    r53c771e re90988c  
    104104    def testHelpButton(self): 
    105105        """ Assure help file is shown """ 
     106        self.widget.manager.showHelp = MagicMock() 
    106107        self.widget.onHelp() 
     108        self.assertTrue(self.widget.manager.showHelp.called_once()) 
     109        args = self.widget.manager.showHelp.call_args 
     110        self.assertIn('sas_calculator_help.html', args[0][0]) 
    107111 
    108112    def testValidator(self): 
  • src/sas/qtgui/Calculators/UnitTesting/KiessigCalculatorTest.py

    r53c771e re90988c  
    55from PyQt5.QtCore import Qt 
    66 
    7 # TEMP 
    8 #import sas.qtgui.path_prepare 
    97import path_prepare 
    10  
     8from unittest.mock import MagicMock 
    119 
    1210from sas.qtgui.Calculators.KiessigPanel import KiessigPanel 
     
    3533    def testHelp(self): 
    3634        """ Assure help file is shown """ 
    37  
    38         # this should not rise 
     35        self.widget.manager = QtWidgets.QWidget() 
     36        self.widget.manager.showHelp = MagicMock() 
    3937        self.widget.onHelp() 
     38        self.assertTrue(self.widget.manager.showHelp.called_once()) 
     39        args = self.widget.manager.showHelp.call_args 
     40        self.assertIn('kiessig_calculator_help.html', args[0][0]) 
    4041 
    4142    def testComplexEntryNumbers(self): 
  • src/sas/qtgui/Calculators/UnitTesting/ResolutionCalculatorPanelTest.py

    r53c771e re90988c  
    240240        """ Assure help file is shown """ 
    241241        # this should not rise 
     242        self.widget.manager = QtWidgets.QWidget() 
     243        self.widget.manager.showHelp = MagicMock() 
    242244        self.widget.onHelp() 
     245        self.assertTrue(self.widget.manager.showHelp.called_once()) 
     246        args = self.widget.manager.showHelp.call_args 
     247        self.assertIn('resolution_calculator_help.html', args[0][0]) 
    243248 
    244249    def testOnReset(self): 
  • src/sas/qtgui/Calculators/UnitTesting/SLDCalculatorTest.py

    r53c771e re90988c  
    142142    def testHelp(self): 
    143143        """ Assure help file is shown """ 
    144  
    145         # this should not rise 
     144        self.widget.manager = QtWidgets.QWidget() 
     145        self.widget.manager.showHelp = MagicMock() 
    146146        self.widget.displayHelp() 
     147        self.assertTrue(self.widget.manager.showHelp.called_once()) 
     148        args = self.widget.manager.showHelp.call_args 
     149        self.assertIn('sld_calculator_help.html', args[0][0]) 
    147150 
    148151if __name__ == "__main__": 
  • src/sas/qtgui/Calculators/UnitTesting/SlitSizeCalculatorTest.py

    r53c771e re90988c  
    3737    def testHelp(self): 
    3838        """ Assure help file is shown """ 
    39  
    40         # this should not rise 
     39        self.widget._parent = QtWidgets.QWidget() 
     40        self.widget._parent.showHelp = MagicMock() 
    4141        self.widget.onHelp() 
     42        self.assertTrue(self.widget._parent.showHelp.called_once()) 
     43        args = self.widget._parent.showHelp.call_args 
     44        self.assertIn('slit_calculator_help.html', args[0][0]) 
    4245 
    4346    def testBrowseButton(self): 
  • src/sas/qtgui/MainWindow/DataExplorer.py

    rcb4d219 re90988c  
    88from PyQt5 import QtGui 
    99from PyQt5 import QtWidgets 
    10 from PyQt5 import QtWebKitWidgets 
    1110 
    1211from twisted.internet import threads 
     
    7069        self.cmdHelp_2.clicked.connect(self.displayHelp) 
    7170 
    72         # Display HTML content 
    73         self._helpView = QtWebKitWidgets.QWebView() 
    74  
    7571        # Fill in the perspectives combo 
    7672        self.initPerspectives() 
     
    141137        Show the "Loading data" section of help 
    142138        """ 
    143         tree_location = GuiUtils.HELP_DIRECTORY_LOCATION +\ 
    144             "/user/sasgui/guiframe/data_explorer_help.html" 
    145         self._helpView.load(QtCore.QUrl(tree_location)) 
    146         self._helpView.show() 
     139        tree_location = "/user/sasgui/guiframe/data_explorer_help.html" 
     140        self.parent.showHelp(tree_location) 
    147141 
    148142    def enableGraphCombo(self, combo_text): 
  • src/sas/qtgui/MainWindow/GuiManager.py

    rd1955d67 re90988c  
    8686        # Set up the status bar 
    8787        self.statusBarSetup() 
    88         # Show the Welcome panel 
    89         self.welcomePanel = WelcomePanel() 
    90         self._workspace.workspace.addSubWindow(self.welcomePanel) 
    91  
    92         # Current help file 
    93         self._helpView = QWebView() 
     88 
    9489        # Needs URL like path, so no path.join() here 
    9590        self._helpLocation = GuiUtils.HELP_DIRECTORY_LOCATION + "/index.html" 
     
    9994                                              "_downloads", 
    10095                                              "Tutorial.pdf")) 
     96 
    10197    def addWidgets(self): 
    10298        """ 
     
    131127        self.ackWidget = Acknowledgements() 
    132128        self.aboutWidget = AboutBox() 
     129        self.welcomePanel = WelcomePanel() 
    133130 
    134131        # Add calculators - floating for usability 
     
    165162        """ 
    166163        pass 
     164 
     165    def showHelp(self, url): 
     166        """ 
     167        Open a local url in the default browser 
     168        """ 
     169        location = GuiUtils.HELP_DIRECTORY_LOCATION + url 
     170        try: 
     171            webbrowser.open('file://' + os.path.realpath(location)) 
     172        except webbrowser.Error as ex: 
     173            logging.warning("Cannot display help. %s" % ex) 
    167174 
    168175    def workspace(self): 
     
    334341            msg += " Please try again later." 
    335342            self.communicate.statusBarUpdateSignal.emit(msg) 
     343 
     344    def showWelcomeMessage(self): 
     345        """ Show the Welcome panel """ 
     346        self._workspace.workspace.addSubWindow(self.welcomePanel) 
     347        self.welcomePanel.show() 
    336348 
    337349    def addCallbacks(self): 
     
    714726        TODO: use QNetworkAccessManager to assure _helpLocation is valid 
    715727        """ 
    716         self._helpView.load(QUrl(self._helpLocation)) 
    717         self._helpView.show() 
     728        self.showHelp(self._helpLocation) 
    718729 
    719730    def actionTutorial(self): 
  • src/sas/qtgui/MainWindow/MainWindow.py

    r53c771e r8353d90  
    11# UNLESS EXEPTIONALLY REQUIRED TRY TO AVOID IMPORTING ANY MODULES HERE 
    22# ESPECIALLY ANYTHING IN SAS, SASMODELS NAMESPACE 
    3 #from PyQt4 import QtGui 
    4 from PyQt5.QtWidgets import * 
    5 from PyQt5.QtGui import * 
     3from PyQt5.QtWidgets import QMainWindow 
     4from PyQt5.QtWidgets import QMdiArea 
     5from PyQt5.QtWidgets import QSplashScreen 
     6from PyQt5.QtWidgets import QApplication 
     7from PyQt5.QtGui import QPixmap 
    68 
    79# Local UI 
     
    7173    # Show the main SV window 
    7274    mainwindow = MainSasViewWindow() 
    73     mainwindow.show() 
     75    mainwindow.showMaximized() 
    7476 
    7577    # no more splash screen 
    7678    splash.finish(mainwindow) 
     79 
     80    # Time for the welcome window 
     81    mainwindow.guiManager.showWelcomeMessage() 
    7782 
    7883    # No need to .exec_ - the reactor takes care of it. 
  • src/sas/qtgui/MainWindow/UnitTesting/GuiManagerTest.py

    • Property mode changed from 100755 to 100644
    r53c771e r8353d90  
    1919from sas.qtgui.MainWindow.AboutBox import AboutBox 
    2020from sas.qtgui.MainWindow.WelcomePanel import WelcomePanel 
    21 #from sas.qtgui.Utilities.IPythonWidget import IPythonWidget 
     21from sas.qtgui.Utilities.IPythonWidget import IPythonWidget 
    2222 
    2323from sas.qtgui.MainWindow.GuiManager import Acknowledgements, GuiManager 
  • src/sas/qtgui/MainWindow/UnitTesting/MainWindowTest.py

    r53c771e r8353d90  
    1515from sas.qtgui.MainWindow.MainWindow import SplashScreen 
    1616from sas.qtgui.MainWindow.GuiManager import GuiManager 
     17from sas.qtgui.Perspectives.Fitting import FittingPerspective 
    1718 
    1819if not QtWidgets.QApplication.instance(): 
     
    4041        self.assertIsInstance(splash, QtWidgets.QSplashScreen) 
    4142 
     43    def testWidgets(self): 
     44        """ Test enablement/disablement of widgets """ 
     45        # Open the main window 
     46        tmp_main = MainSasViewWindow(None) 
     47        tmp_main.showMaximized() 
     48        # See that only one subwindow is up 
     49        self.assertEqual(len(tmp_main.workspace.subWindowList()), 1) 
     50        # and that the subwindow is the fitting perspective 
     51        self.assertIsInstance(tmp_main.workspace.subWindowList()[0].widget(), 
     52                              FittingPerspective.FittingWindow) 
     53        # Show the message widget 
     54        tmp_main.guiManager.showWelcomeMessage() 
     55        # Assure it is visible and a part of the MdiArea 
     56        self.assertTrue(tmp_main.guiManager.welcomePanel.isVisible()) 
     57        self.assertEqual(len(tmp_main.workspace.subWindowList()), 2) 
     58 
     59        tmp_main.close() 
     60 
    4261    def testExit(self): 
    4362        """ 
  • src/sas/qtgui/Perspectives/Corfunc/CorfuncPerspective.py

    rcb4d219 re90988c  
    55 
    66# global 
     7from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg \ 
     8    as FigureCanvas 
     9from matplotlib.figure import Figure 
     10from numpy.linalg.linalg import LinAlgError 
     11 
    712from PyQt5 import QtCore 
    813from PyQt5 import QtGui, QtWidgets 
     
    1722from .UI.CorfuncPanel import Ui_CorfuncDialog 
    1823from .CorfuncUtils import WIDGETS as W 
    19  
    20 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg \ 
    21     as FigureCanvas 
    22 from matplotlib.figure import Figure 
    23 from numpy.linalg.linalg import LinAlgError 
    2424 
    2525 
     
    136136        self.cmdCalculateBg.clicked.connect(self.calculate_background) 
    137137        self.cmdCalculateBg.setEnabled(False) 
     138        self.cmdHelp.clicked.connect(self.showHelp) 
    138139 
    139140        self.model.itemChanged.connect(self.model_changed) 
     
    306307 
    307308    # pylint: disable=invalid-name 
     309    def showHelp(self): 
     310        """ 
     311        Opens a webpage with help on the perspective 
     312        """ 
     313        """ Display help when clicking on Help button """ 
     314        treeLocation = "/user/sasgui/perspectives/corfunc/corfunc_help.html" 
     315        self.parent.showHelp(treeLocation) 
     316 
    308317    @staticmethod 
    309318    def allowBatch(): 
     
    368377            self.setClosable(value=False) 
    369378            # Tell the MdiArea to close the container 
    370             self.parentWidget().close() 
     379            if self.parent: 
     380                self.parentWidget().close() 
    371381            event.accept() 
    372382        else: 
  • src/sas/qtgui/Perspectives/Fitting/FittingOptions.py

    rd6b8a1d re90988c  
    33import os 
    44import types 
     5import webbrowser 
    56 
    67from PyQt5 import QtCore 
    78from PyQt5 import QtGui 
    89from PyQt5 import QtWidgets 
    9 from PyQt5 import QtWebKitWidgets 
    1010 
    1111from sas.qtgui.UI import images_rc 
     
    7373        # OK has to be initialized to True, after initial validator setup 
    7474        self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(True) 
    75  
    76         # Display HTML content 
    77         self.helpView = QtWebKitWidgets.QWebView() 
    7875 
    7976    def assignValidators(self): 
     
    160157        Show the "Fitting options" section of help 
    161158        """ 
    162         tree_location = GuiUtils.HELP_DIRECTORY_LOCATION + "/user/sasgui/perspectives/fitting/" 
     159        tree_location = GuiUtils.HELP_DIRECTORY_LOCATION 
     160        tree_location += "/user/sasgui/perspectives/fitting/" 
    163161 
    164162        # Actual file anchor will depend on the combo box index 
     
    167165        helpfile = "optimizer.html#fit-" + self.current_fitter_id  
    168166        help_location = tree_location + helpfile 
    169         self.helpView.load(QtCore.QUrl(help_location)) 
    170         self.helpView.show() 
     167        webbrowser.open('file://' + os.path.realpath(help_location)) 
    171168 
    172169    def widgetFromOption(self, option_id, current_fitter=None): 
  • src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py

    r7c487846 re90988c  
    1313from sas.qtgui.Perspectives.Fitting.FittingOptions import FittingOptions 
    1414from sas.qtgui.Perspectives.Fitting.GPUOptions import GPUOptions 
    15 #from sas.qtgui.Perspectives.Fitting import ModelUtilities 
    1615 
    1716class FittingWindow(QtWidgets.QTabWidget): 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    ra3c94b54 rd3c0b95  
    88from twisted.internet import threads 
    99import numpy as np 
     10import webbrowser 
    1011 
    1112from PyQt5 import QtCore 
    1213from PyQt5 import QtGui 
    1314from PyQt5 import QtWidgets 
    14 from PyQt5 import QtWebKitWidgets 
    15 # Officially QtWebEngineWidgets are the way to display HTML in Qt5, 
    16 # but this module isn't ported to PyQt5 yet... 
    17 # let's wait. In the meantime no Help. 
    18 #from PyQt5 import QtWebEngineWidgets 
    1915 
    2016from sasmodels import product 
     
    130126 
    131127        # Display HTML content 
    132         self.helpView = QtWebKitWidgets.QWebView() 
     128        #self.setupHelp() 
    133129 
    134130        # New font to display angstrom symbol 
     
    945941        Show the "Fitting" section of help 
    946942        """ 
    947         tree_location = GuiUtils.HELP_DIRECTORY_LOCATION + "/user/sasgui/perspectives/fitting/" 
     943        tree_location = "/user/sasgui/perspectives/fitting/" 
    948944 
    949945        # Actual file will depend on the current tab 
     
    955951            helpfile = "residuals_help.html" 
    956952        elif tab_id == 2: 
    957             helpfile = "sm_help.html" 
     953            helpfile = "resolution.html" 
    958954        elif tab_id == 3: 
    959             helpfile = "pd_help.html" 
     955            helpfile = "pd/polydispersity.html" 
    960956        elif tab_id == 4: 
    961             helpfile = "mag_help.html" 
     957            helpfile = "magnetism/magnetism.html" 
    962958        help_location = tree_location + helpfile 
    963959 
    964         content = QtCore.QUrl(help_location) 
    965         self.helpView.load(QtCore.QUrl(help_location)) 
    966         self.helpView.show() 
     960        self.showHelp(help_location) 
     961 
     962    def showHelp(self, url): 
     963        """ 
     964        Calls parent's method for opening an HTML page 
     965        """ 
     966        self.parent.showHelp(url) 
    967967 
    968968    def onDisplayMagneticAngles(self): 
  • src/sas/qtgui/Perspectives/Fitting/GPUOptions.py

    rc7ebb37 re90988c  
    88 
    99import sas.qtgui.Utilities.GuiUtils as GuiUtils 
    10 from PyQt5 import QtGui, QtCore, QtWebKit, QtWidgets 
     10from PyQt5 import QtGui, QtCore, QtWidgets 
    1111from sas.qtgui.Perspectives.Fitting.UI.GPUOptionsUI import Ui_GPUOptions 
    1212from sas.qtgui.Perspectives.Fitting.UI.GPUTestResultsUI import Ui_GPUTestResults 
     
    172172        help_location += "/user/sasgui/perspectives/fitting/gpu_setup.html" 
    173173        help_location += "#device-selection" 
    174         # Test the system browser solution 
     174        # Display the page in default browser 
    175175        webbrowser.open('file://' + os.path.realpath(help_location)) 
    176176 
  • src/sas/qtgui/Perspectives/Fitting/MultiConstraint.py

    ra3c94b54 re147ce2  
    22Widget for parameter constraints. 
    33""" 
     4import os 
    45from numpy import * 
    56 
     
    78from PyQt5 import QtGui 
    89from PyQt5 import QtWidgets 
     10import webbrowser 
    911 
    1012import sas.qtgui.Utilities.GuiUtils as GuiUtils 
     
    128130        """ 
    129131        try: 
    130             location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
     132            help_location = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    131133            "/user/sasgui/perspectives/fitting/fitting_help.html#simultaneous-fits-with-constraints" 
    132  
    133             self.manager._helpView.load(QtCore.QUrl(location)) 
    134             self.manager._helpView.show() 
     134            webbrowser.open('file://' + os.path.realpath(help_location)) 
    135135        except AttributeError: 
    136136            # No manager defined - testing and standalone runs 
  • src/sas/qtgui/Perspectives/Invariant/InvariantPerspective.py

    rd1955d67 re90988c  
    88from PyQt5 import QtCore 
    99from PyQt5 import QtGui, QtWidgets 
    10 from PyQt5 import QtWebKit 
    1110 
    1211from twisted.internet import threads 
     
    6362        self._model_item = QtGui.QStandardItem() 
    6463 
    65         #self._helpView = QtWebKit.QWebView() 
    6664        self.detailsDialog = DetailsDialog(self) 
    6765        self.detailsDialog.cmdOK.clicked.connect(self.enabling) 
     
    8280        # no reason to have this widget resizable 
    8381        self.resize(self.minimumSizeHint()) 
    84         #self.setFixedSize(self.sizeHint()) 
    8582 
    8683        self.communicate = self._manager.communicator() 
     
    228225 
    229226        self.model = model 
     227        self.mapper.toFirst() 
    230228        self._data = GuiUtils.dataFromItem(self._model_item) 
    231229 
    232230        # Send the modified model item to DE for keeping in the model 
    233231        # Currently -unused 
    234         #self.communicate.updateModelFromPerspectiveSignal.emit(self._model_item) 
     232        # self.communicate.updateModelFromPerspectiveSignal.emit(self._model_item) 
    235233 
    236234        plot_data = GuiUtils.plotsFromCheckedItems(self._manager.filesWidget.model) 
     
    365363            if self._high_extrapolate: 
    366364                # for presentation in InvariantDetails 
    367                 qmax_plot = Q_MAXIMUM_PLOT * max(temp_data.x) # self._data.x) 
     365                qmax_plot = Q_MAXIMUM_PLOT * max(temp_data.x) 
    368366 
    369367                if qmax_plot > Q_MAXIMUM: 
     
    431429    def onHelp(self): 
    432430        """ Display help when clicking on Help button """ 
    433         treeLocation = GuiUtils.HELP_DIRECTORY_LOCATION + \ 
    434             "/user/sasgui/perspectives/invariant/invariant_help.html" 
    435         webbrowser.open('file://' + treeLocation) 
     431        treeLocation = "/user/sasgui/perspectives/invariant/invariant_help.html" 
     432        self.parent.showHelp(treeLocation) 
    436433 
    437434    def setupSlots(self): 
  • src/sas/qtgui/Perspectives/Invariant/UI/TabbedInvariantUI.ui

    rd1955d67 r9387fe3  
    142142                <widget class="QLineEdit" name="txtTotalQMin"> 
    143143                 <property name="enabled"> 
    144                   <bool>false</bool> 
     144                  <bool>true</bool> 
    145145                 </property> 
    146146                </widget> 
     
    156156                <widget class="QLineEdit" name="txtTotalQMax"> 
    157157                 <property name="enabled"> 
    158                   <bool>false</bool> 
     158                  <bool>true</bool> 
    159159                 </property> 
    160160                </widget> 
     
    192192           <widget class="QLineEdit" name="txtVolFract"> 
    193193            <property name="enabled"> 
    194              <bool>false</bool> 
     194             <bool>true</bool> 
    195195            </property> 
    196196            <property name="autoFillBackground"> 
     
    221221           <widget class="QLineEdit" name="txtVolFractErr"> 
    222222            <property name="enabled"> 
    223              <bool>false</bool> 
     223             <bool>true</bool> 
    224224            </property> 
    225225            <property name="frame"> 
     
    244244           <widget class="QLineEdit" name="txtSpecSurf"> 
    245245            <property name="enabled"> 
    246              <bool>false</bool> 
     246             <bool>true</bool> 
    247247            </property> 
    248248            <property name="frame"> 
     
    267267           <widget class="QLineEdit" name="txtSpecSurfErr"> 
    268268            <property name="enabled"> 
    269              <bool>false</bool> 
     269             <bool>true</bool> 
    270270            </property> 
    271271            <property name="frame"> 
     
    305305           <widget class="QLineEdit" name="txtInvariantTot"> 
    306306            <property name="enabled"> 
    307              <bool>false</bool> 
     307             <bool>true</bool> 
    308308            </property> 
    309309            <property name="toolTip"> 
     
    331331           <widget class="QLineEdit" name="txtInvariantTotErr"> 
    332332            <property name="enabled"> 
    333              <bool>false</bool> 
     333             <bool>true</bool> 
    334334            </property> 
    335335            <property name="frame"> 
     
    467467             <widget class="QLineEdit" name="txtExtrapolQMin"> 
    468468              <property name="enabled"> 
    469                <bool>false</bool> 
     469               <bool>true</bool> 
    470470              </property> 
    471471              <property name="toolTip"> 
    472472               <string>The minimum extrapolated q value.</string> 
     473              </property> 
     474              <property name="readOnly"> 
     475               <bool>true</bool> 
    473476              </property> 
    474477             </widget> 
     
    484487             <widget class="QLineEdit" name="txtExtrapolQMax"> 
    485488              <property name="enabled"> 
    486                <bool>false</bool> 
     489               <bool>true</bool> 
     490              </property> 
     491              <property name="readOnly"> 
     492               <bool>true</bool> 
    487493              </property> 
    488494             </widget> 
  • src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py

    r19fce84 re90988c  
    2525        return 0.0 
    2626 
     27NUMBER_OF_TERMS = 10 
     28REGULARIZATION = 0.0001 
     29BACKGROUND_INPUT = 0.0 
     30MAX_DIST = 140.0 
    2731 
    2832# TODO: Modify plot references, don't just send new 
     
    4751        self._manager = parent 
    4852        self._model_item = QtGui.QStandardItem() 
    49         #self._helpView = QtWebKit.QWebView() 
    50  
    5153        self.communicate = GuiUtils.Communicate() 
    5254 
     
    227229        item = QtGui.QStandardItem("") 
    228230        self.model.setItem(WIDGETS.W_FILENAME, item) 
    229         item = QtGui.QStandardItem('0.0') 
     231        item = QtGui.QStandardItem(str(BACKGROUND_INPUT)) 
    230232        self.model.setItem(WIDGETS.W_BACKGROUND_INPUT, item) 
    231233        item = QtGui.QStandardItem("") 
     
    237239        item = QtGui.QStandardItem("") 
    238240        self.model.setItem(WIDGETS.W_SLIT_HEIGHT, item) 
    239         item = QtGui.QStandardItem("10") 
     241        item = QtGui.QStandardItem(str(NUMBER_OF_TERMS)) 
    240242        self.model.setItem(WIDGETS.W_NO_TERMS, item) 
    241         item = QtGui.QStandardItem("0.0001") 
     243        item = QtGui.QStandardItem(str(REGULARIZATION)) 
    242244        self.model.setItem(WIDGETS.W_REGULARIZATION, item) 
    243         item = QtGui.QStandardItem("140.0") 
     245        item = QtGui.QStandardItem(str(MAX_DIST)) 
    244246        self.model.setItem(WIDGETS.W_MAX_DIST, item) 
    245247        item = QtGui.QStandardItem("") 
     
    370372        Open the P(r) Inversion help browser 
    371373        """ 
    372         tree_location = (GuiUtils.HELP_DIRECTORY_LOCATION + 
    373                          "user/sasgui/perspectives/pr/pr_help.html") 
     374        tree_location = "/user/sasgui/perspectives/pr/pr_help.html" 
    374375 
    375376        # Actual file anchor will depend on the combo box index 
    376377        # Note that we can be clusmy here, since bad current_fitter_id 
    377378        # will just make the page displayed from the top 
    378         #self._helpView.load(QtCore.QUrl(tree_location)) 
    379         #self._helpView.show() 
     379        self._manager.showHelp(tree_location) 
    380380 
    381381    def toggleBgd(self): 
     
    439439    def getNFunc(self): 
    440440        """Get the n_func value from the GUI object""" 
    441         return int(self.noOfTermsInput.text()) 
     441        try: 
     442            nfunc = int(self.noOfTermsInput.text()) 
     443        except ValueError: 
     444            logging.error("Incorrect number of terms specified: %s" %self.noOfTermsInput.text()) 
     445            self.noOfTermsInput.setText(str(NUMBER_OF_TERMS)) 
     446            nfunc = NUMBER_OF_TERMS 
     447        return nfunc 
    442448 
    443449    def setCurrentData(self, data_ref): 
  • src/sas/qtgui/Plotting/SlicerParameters.py

    rd6b8a1d re90988c  
    77from PyQt5 import QtGui 
    88from PyQt5 import QtWidgets 
    9 from PyQt5 import QtWebKitWidgets 
    109 
    1110import sas.qtgui.Utilities.GuiUtils as GuiUtils 
     
    8786        Display generic data averaging help 
    8887        """ 
    89         location = "docs/sphinx-docs/build/html" + \ 
    90             "/user/sasgui/guiframe/graph_help.html#d-data-averaging" 
    91         self.helpView = QtWebKitWidgets.QWebView() 
    92         self.helpView.load(QtCore.QUrl(location)) 
    93         self.helpView.show() 
     88        location = "/user/sasgui/guiframe/graph_help.html#d-data-averaging" 
     89        self.parent.showHelp(location) 
    9490 
    9591 
  • src/sas/qtgui/Utilities/GuiUtils.py

    rcb4d219 r6cb305a  
    5858    # clean all these module variables and put them into a config class 
    5959    # that can be passed by sasview.py. 
    60     #logging.info(sys.executable) 
    61     #logging.info(str(sys.argv)) 
     60    # logging.info(sys.executable) 
     61    # logging.info(str(sys.argv)) 
    6262    from sas import sasview as sasview 
    6363    app_path = os.path.dirname(sasview.__file__) 
    64     #logging.info("Using application path: %s", app_path) 
     64    # logging.info("Using application path: %s", app_path) 
    6565    return app_path 
    6666 
     
    249249        if plot_item.isCheckable(): 
    250250            plot_data = plot_item.child(0).data() 
    251             if plot_data.id is not None and plot_data.id == update_data.id: 
     251            if plot_data.id is not None and \ 
     252                   (plot_data.name == update_data.name or plot_data.id == update_data.id): 
     253            # if plot_data.id is not None and plot_data.id == update_data.id: 
    252254                # replace data section in item 
    253255                plot_item.child(0).setData(update_data) 
     
    343345    for index in range(model_item.rowCount()): 
    344346        item = model_item.item(index) 
    345         if item.text() == filename and item.isCheckable() and item.checkState() == QtCore.Qt.Checked: 
     347        if item.text() == filename and item.isCheckable() \ 
     348                and item.checkState() == QtCore.Qt.Checked: 
    346349            # Going 1 level deeper only 
    347350            for index_2 in range(item.rowCount()): 
     
    360363 
    361364    # Iterate over model looking for named items 
    362     item = list([i for i in [model_item.item(index) for index in range(model_item.rowCount())] if str(i.text()) == filename]) 
     365    item = list([i for i in [model_item.item(index) 
     366                             for index in range(model_item.rowCount())] 
     367                 if str(i.text()) == filename]) 
    363368    return item[0] if len(item)>0 else None 
    364369 
     
    396401    for index in range(model_item.rowCount()): 
    397402        item = model_item.item(index) 
    398         if item.isCheckable() and item.checkState() == QtCore.Qt.Checked: 
    399             # TODO: assure item type is correct (either data1/2D or Plotter) 
    400             plot_data.append((item, item.child(0).data())) 
     403 
    401404        # Going 1 level deeper only 
    402405        for index_2 in range(item.rowCount()): 
     
    405408                # TODO: assure item type is correct (either data1/2D or Plotter) 
    406409                plot_data.append((item_2, item_2.child(0).data())) 
     410 
     411        if item.isCheckable() and item.checkState() == QtCore.Qt.Checked: 
     412            # TODO: assure item type is correct (either data1/2D or Plotter) 
     413            plot_data.append((item, item.child(0).data())) 
    407414 
    408415    return plot_data 
  • src/sas/qtgui/Utilities/UnitTesting/GuiUtilsTest.py

    r0261bc1 r6cb305a  
    100100        Test the QModelItem checkbox update method 
    101101        """ 
     102        # test_item = QtGui.QStandardItem() 
     103        # test_list = ['aa','11'] 
     104        # update_data = test_list 
     105        # name = "Black Sabbath" 
     106 
     107        # # update the item 
     108        # updateModelItemWithPlot(test_item, update_data, name) 
     109 
    102110        test_item = QtGui.QStandardItem() 
    103         test_list = ['aa','11'] 
    104         update_data = test_list 
     111        update_data = Data1D(x=[1.0, 2.0, 3.0], y=[10.0, 11.0, 12.0]) 
    105112        name = "Black Sabbath" 
    106  
     113        update_data.id = '[0]data0' 
     114        update_data.name = 'data0' 
    107115        # update the item 
    108116        updateModelItemWithPlot(test_item, update_data, name) 
    109          
     117 
    110118        # Make sure test_item got all data added 
    111119        self.assertEqual(test_item.child(0).text(), name) 
    112120        self.assertTrue(test_item.child(0).isCheckable()) 
    113         list_from_item = test_item.child(0).child(0).data() 
    114         self.assertIsInstance(list_from_item, list) 
    115         self.assertEqual(str(list_from_item[0]), test_list[0]) 
    116         self.assertEqual(str(list_from_item[1]), test_list[1]) 
     121        data_from_item = test_item.child(0).child(0).data() 
     122        self.assertIsInstance(data_from_item, Data1D) 
     123        self.assertSequenceEqual(list(data_from_item.x), [1.0, 2.0, 3.0]) 
     124        self.assertSequenceEqual(list(data_from_item.y), [10.0, 11.0, 12.0]) 
     125        self.assertEqual(test_item.rowCount(), 1) 
     126 
     127        # add another dataset (different from the first one) 
     128        update_data1 = Data1D(x=[1.1, 2.1, 3.1], y=[10.1, 11.1, 12.1]) 
     129        update_data1.id = '[0]data1' 
     130        update_data1.name = 'data1' 
     131        name1 = "Black Sabbath1" 
     132        # update the item and check number of rows 
     133        updateModelItemWithPlot(test_item, update_data1, name1) 
     134 
     135        self.assertEqual(test_item.rowCount(), 2) 
     136 
     137        # add another dataset (with the same name as the first one) 
     138        # check that number of rows was not changed but data have been updated 
     139        update_data2 = Data1D(x=[4.0, 5.0, 6.0], y=[13.0, 14.0, 15.0]) 
     140        update_data2.id = '[1]data0' 
     141        update_data2.name = 'data0' 
     142        name2 = "Black Sabbath2" 
     143        updateModelItemWithPlot(test_item, update_data2, name2) 
     144        self.assertEqual(test_item.rowCount(), 2) 
     145 
     146        data_from_item = test_item.child(0).child(0).data() 
     147        self.assertSequenceEqual(list(data_from_item.x), [4.0, 5.0, 6.0]) 
     148        self.assertSequenceEqual(list(data_from_item.y), [13.0, 14.0, 15.0]) 
    117149 
    118150 
     
    162194        # Make sure only the checked data is present 
    163195        # FRIDAY IN 
    164         self.assertIn(test_list0, plot_list[0]) 
     196        self.assertIn(test_list0, plot_list[1]) 
    165197        # SATURDAY IN 
    166         self.assertIn(test_list1, plot_list[1]) 
     198        self.assertIn(test_list1, plot_list[0]) 
    167199        # MONDAY NOT IN 
    168200        self.assertNotIn(test_list2, plot_list[0]) 
Note: See TracChangeset for help on using the changeset viewer.