Example #1
0
def stopSessionWithoutConfirmation():

    #For data acquisition sessions, stop sampling and save to file
    if playMode == PlayMode.ACQUISITION:
        #Stop sampling
        tco.orderToStopSession()

        #Save session to file
        JSONConverter.endDataAcquisition()

        #Hide trial info label
        mainWindow.trialInfoLabel.hide()

    #Clears the session
    ts.currentSession = None

    #Resets the graph
    tg.resetTrialGraph()

    #Resets the play, stop, and lock buttons
    mainWindow.playButton.setIcon(playIcon)
    mainWindow.playButton.setEnabled(True)
    mainWindow.stopButton.setEnabled(False)
    mainWindow.lockButton.setEnabled(True)

    #Always go back to default acquisition mode when no session is pulled up
    setPlayMode(PlayMode.ACQUISITION)
def saveDisplaySettings():

    global displayRate, antiAliasing, shading, colors, renderOffset

    #First, extract display settings from the menu
    displayRate = displaySettingsWrapper.displayRateSpinBox.value()
    antiAliasing = displaySettingsWrapper.antiAliasingCheckBox.isChecked()
    shading = displaySettingsWrapper.shadingCheckBox.isChecked()
    renderOffset = displaySettingsWrapper.renderOffsetCheckBox.isChecked()
    colors = (colorButtons[0].palette().button().color(),
              colorButtons[1].palette().button().color(),
              colorButtons[2].palette().button().color(),
              colorButtons[3].palette().button().color(),
              colorButtons[4].palette().button().color(),
              colorButtons[5].palette().button().color(),
              colorButtons[6].palette().button().color())

    #Then, save settings to file...
    try:

        #Open the display settings file in write mode (overwrites anything already in it, no appending)
        displaySettingsFile = open(file="Display Settings.txt", mode="w")

    #Error opening the file
    except Exception as e:
        print("Error opening display settings file...\n")
        print(e)  #Detailed error message
        print()  #Extra empty line for spacing

    #Occurs if there are no problems opening the file
    else:
        displaySettingsFile.write(
            "Note: Don't comment this file because it is regenerated on save.")
        displaySettingsFile.write("\n\nrefresh rate = " + str(displayRate))
        displaySettingsFile.write("\n\nanti-aliasing = " + str(antiAliasing))
        displaySettingsFile.write("\nshading = " + str(shading))
        displaySettingsFile.write(
            "\n\nbackground color = " +
            colors[ColorAttribute.BACKGROUND.value].name())
        displaySettingsFile.write("\ndata color = " +
                                  colors[ColorAttribute.DATA.value].name())
        displaySettingsFile.write("\ntext color = " +
                                  colors[ColorAttribute.TEXT.value].name())
        displaySettingsFile.write("\nstimulus color = " +
                                  colors[ColorAttribute.STIMULUS.value].name())
        displaySettingsFile.write("\naxis color = " +
                                  colors[ColorAttribute.AXIS.value].name())
        displaySettingsFile.write("\nrender offset arrows = " +
                                  str(renderOffset))
        displaySettingsFile.write("\nonset color = " +
                                  colors[ColorAttribute.ONSET.value].name())
        displaySettingsFile.write("\noffset color = " +
                                  colors[ColorAttribute.OFFSET.value].name())

        #Close the file when done to avoid file descriptor memory leaks
        displaySettingsFile.close()

    #Finally, apply the settings to the graph
    tg.updateGraphSettings()
Example #3
0
def stopSession():

    #Clears the session
    ts.currentSession = None

    #Resets the graph
    tg.resetGraph()

    #Stops playing the graph
    tg.setPlaying(False)

    #Resets the play, stop, and lock buttons
    mainWindow.playButton.setIcon(playIcon)
    mainWindow.stopButton.setEnabled(False)
    mainWindow.lockButton.setEnabled(True)
Example #4
0
def stopButtonPressed():

    #Pauses when stop is pressed
    if (tg.isPlaying()):
        setPlaying(not tg.isPlaying())

    #Confirm that this is what the user wants
    confirmStop = QMessageBox()
    confirmStop.setText("Are you sure you want to stop the current session?")
    confirmStop.setWindowTitle("Confirm Stop")
    confirmStop.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
    decision = confirmStop.exec()

    #If it is, stop the session
    if decision == QMessageBox.Yes:
        stopSession()
Example #5
0
def loadTrial(trialNumber):

    #Clear current trial
    tg.resetTrialGraph()

    #Set trial number, wrapping around if trial number is out bounds
    if trialNumber > ts.currentSession.trialCount:
        ts.currentSession.currentTrial = 1

    elif trialNumber < 1:
        ts.currentSession.currentTrial = ts.currentSession.trialCount

    else:
        ts.currentSession.currentTrial = trialNumber

    #Display new trial
    tg.createTrialGraph()
Example #6
0
def setPlaying(play):

    #No pause/play in playback
    if playMode == PlayMode.PLAYBACK:
        return

    #Creates a session if there's not one already (there must be a current session)
    if not ts.currentSession:

        #Create session
        ts.currentSession = ts.TheSession(mainWindow,
                                          generatePseudoOrdering=True)

        #Perform set up specific to data acquisition...

        #Prepare session saving module
        JSONConverter.startDataAcquisition()

        #Display trial info label
        mainWindow.trialInfoLabel.setText("RUNNING TRIAL")
        mainWindow.trialInfoLabel.show()

    #Sets whether or not the graph is playing based off of the value of play
    tg.setPlaying(play)

    #Update play button icon
    if play:
        mainWindow.playButton.setIcon(pauseIcon)
    else:
        mainWindow.playButton.setIcon(playIcon)

    #Update trial info label
    if not tg.duringITI:
        if play:
            mainWindow.trialInfoLabel.setText("RUNNING TRIAL")
        else:
            mainWindow.trialInfoLabel.setText("TRIAL PAUSED")

    #Any interaction with play button means you cannot unlock the settings
    #...because a session must already be running
    mainWindow.lockButton.setEnabled(False)

    #The session can be stopped if the play button is interacted with
    #...because a session must already be running
    mainWindow.stopButton.setEnabled(True)
Example #7
0
def setPlaying(play):

    #Gets the current session
    if not ts.currentSession:
        ts.currentSession = ts.TheSession(mainWindow)

    #Sets whether or not the graph is playing based off of the value of play
    tg.setPlaying(play)

    #If play is true change the icon to the pause Icon
    if play:
        mainWindow.playButton.setIcon(pauseIcon)

    #Otherwise set the icon to the play icon
    else:
        mainWindow.playButton.setIcon(playIcon)

    #Any interaction with play button means you cannot unlock the settings
    mainWindow.lockButton.setEnabled(False)

    #The session can be stopped if the play button is interacted with
    mainWindow.stopButton.setEnabled(True)
Example #8
0
    app = QtWidgets.QApplication(sys.argv)

    #Removes the "?" button from all windows
    #QtWidgets.QApplication.setAttribute(Qt.AA_DisableWindowContextHelpButton)

    #Create and set up the main window
    MainWindow = QtWidgets.QMainWindow()
    ui = mw.Ui_MainWindow()
    ui.setupUi(MainWindow)

    #If there's an error in the main process, we need special error handling to close the child process (the sampling process), so it doesn't become a zombie.
    sys.excepthook = mainProcessErrorHandler

    #Perform all necessary set up including launching the time critical (sampling) process
    #Comments on side indicate dependencies in ordering of start up calls
    dsm.initialSetUp()
    im.initialSetUp(ui)
    tg.initialSetUp(ui)  #Uses DSM and IM
    jc.initialSetUp(ui)
    tco.initialSetUp()

    #Start of program
    MainWindow.show()
    app.exec_()  #Run the main Qt Event loop (for listening to UI input)

    #Make sure the sampling process terminates
    tco.orderToStopProcess()

    #Exit program with no errors
    sys.exit(0)
Example #9
0
def openSession(fileStr=""):

    #You must first close the current session
    if ts.currentSession:
        stopSessionConditionalConfirmation()

        #If user says no to stopping current session, then cancel opening another
        if ts.currentSession:
            return

    if fileStr == "":

        #Pop up "Open" window to retrieve file name and location of session file user wants to open. The function returns a (file name/location, file type) tuple but its indexed at 0 to just get file name
        fileNameAndLocation = QtGui.QFileDialog.getOpenFileName(
            parent=mainWindow.centralwidget,
            caption="Open Session For Playback",
            directory=JSONConverter.getSavedSessionDirectory(
                createIfNonexistent=True),
            filter="JSON (*.json)")[0]

    else:
        fileNameAndLocation = fileStr

    #If user didn't click cancel on "Open", proceed for opening session in playback mode
    if len(fileNameAndLocation) > 0:

        #Opening a session means going into playback mode
        setPlayMode(PlayMode.PLAYBACK)

        #Load in the session from the JSON file
        errorMessage = JSONConverter.openJSONFile(fileNameAndLocation, True)

        #Check if there was an error before proceeding
        if errorMessage:

            #Craft error message
            fullMessage = "Cannot read session file for the following reason...\n\n" + errorMessage

            #Notify user
            cannotReadSession = QMessageBox()
            cannotReadSession.setText(fullMessage)
            cannotReadSession.setWindowTitle("Error Opening Session")
            cannotReadSession.setStandardButtons(QMessageBox.Ok)
            cannotReadSession.setIcon(QMessageBox.Critical)
            cannotReadSession.setFont(popUpFont)
            cannotReadSession.exec()

            #In case a session was created, clear it (there shouldn't be though, just being safe)
            if ts.currentSession:
                stopSessionWithoutConfirmation()

            #Return to data acquisition mode
            setPlayMode(PlayMode.ACQUISITION)

        else:

            #Display the first trial of the session on the graph
            tg.createTrialGraph()

    else:

        #User cancelled opening a session so default back to empty, ready to start data acquisition mode
        setPlayMode(PlayMode.ACQUISITION)
Example #10
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1324, 758)
        font = QtGui.QFont()
        font.setFamily("MS Sans Serif")
        MainWindow.setFont(font)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.rootHorizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.rootHorizontalLayout.setObjectName("rootHorizontalLayout")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
        self.scrollArea.setSizePolicy(sizePolicy)
        self.scrollArea.setMinimumSize(QtCore.QSize(500, 0))
        self.scrollArea.setFocusPolicy(QtCore.Qt.NoFocus)
        self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 490, 801))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.formLayout_2 = QtWidgets.QFormLayout(self.scrollAreaWidgetContents)
        self.formLayout_2.setObjectName("formLayout_2")
        self.sessionSettings = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(22)
        font.setBold(True)
        font.setWeight(75)
        self.sessionSettings.setFont(font)
        self.sessionSettings.setObjectName("sessionSettings")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.sessionSettings)
        self.sessionName = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.sessionName.setFont(font)
        self.sessionName.setObjectName("sessionName")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.sessionName)
        self.sampleIntervalLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.sampleIntervalLabel.setFont(font)
        self.sampleIntervalLabel.setObjectName("sampleIntervalLabel")
        self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.sampleIntervalLabel)
        self.sampleIntervalSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        self.sampleIntervalSpinBox.setEnabled(True)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.sampleIntervalSpinBox.setFont(font)
        self.sampleIntervalSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.sampleIntervalSpinBox.setSuffix("")
        self.sampleIntervalSpinBox.setMinimum(1)
        self.sampleIntervalSpinBox.setMaximum(1000)
        self.sampleIntervalSpinBox.setProperty("value", 1)
        self.sampleIntervalSpinBox.setObjectName("sampleIntervalSpinBox")
        self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.sampleIntervalSpinBox)
        self.trialCountLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.trialCountLabel.setFont(font)
        self.trialCountLabel.setObjectName("trialCountLabel")
        self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.trialCountLabel)
        self.trialCountSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.trialCountSpinBox.setFont(font)
        self.trialCountSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.trialCountSpinBox.setMinimum(1)
        self.trialCountSpinBox.setMaximum(10000000)
        self.trialCountSpinBox.setSingleStep(5)
        self.trialCountSpinBox.setProperty("value", 60)
        self.trialCountSpinBox.setObjectName("trialCountSpinBox")
        self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.trialCountSpinBox)
        spacerItem = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(9, QtWidgets.QFormLayout.LabelRole, spacerItem)
        self.itiLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.itiLabel.setFont(font)
        self.itiLabel.setObjectName("itiLabel")
        self.formLayout_2.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.itiLabel)
        self.itiSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.itiSpinBox.setFont(font)
        self.itiSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.itiSpinBox.setSuffix("")
        self.itiSpinBox.setMaximum(9999)
        self.itiSpinBox.setProperty("value", 15)
        self.itiSpinBox.setObjectName("itiSpinBox")
        self.formLayout_2.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.itiSpinBox)
        self.itiVarianceLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.itiVarianceLabel.setFont(font)
        self.itiVarianceLabel.setObjectName("itiVarianceLabel")
        self.formLayout_2.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.itiVarianceLabel)
        self.itiVarianceSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.itiVarianceSpinBox.setFont(font)
        self.itiVarianceSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.itiVarianceSpinBox.setSuffix("")
        self.itiVarianceSpinBox.setMaximum(9999)
        self.itiVarianceSpinBox.setProperty("value", 3)
        self.itiVarianceSpinBox.setObjectName("itiVarianceSpinBox")
        self.formLayout_2.setWidget(11, QtWidgets.QFormLayout.FieldRole, self.itiVarianceSpinBox)
        spacerItem1 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(12, QtWidgets.QFormLayout.LabelRole, spacerItem1)
        self.trialSettings = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(22)
        font.setBold(True)
        font.setWeight(75)
        self.trialSettings.setFont(font)
        self.trialSettings.setObjectName("trialSettings")
        self.formLayout_2.setWidget(13, QtWidgets.QFormLayout.LabelRole, self.trialSettings)
        self.trialDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.trialDurationLabel.setFont(font)
        self.trialDurationLabel.setObjectName("trialDurationLabel")
        self.formLayout_2.setWidget(14, QtWidgets.QFormLayout.LabelRole, self.trialDurationLabel)
        self.trialDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.trialDurationSpinBox.setFont(font)
        self.trialDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.trialDurationSpinBox.setSuffix("")
        self.trialDurationSpinBox.setMinimum(0)
        self.trialDurationSpinBox.setMaximum(10000000)
        self.trialDurationSpinBox.setSingleStep(1000)
        self.trialDurationSpinBox.setProperty("value", 3000)
        self.trialDurationSpinBox.setObjectName("trialDurationSpinBox")
        self.formLayout_2.setWidget(14, QtWidgets.QFormLayout.FieldRole, self.trialDurationSpinBox)
        self.baselineDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.baselineDurationLabel.setFont(font)
        self.baselineDurationLabel.setObjectName("baselineDurationLabel")
        self.formLayout_2.setWidget(15, QtWidgets.QFormLayout.LabelRole, self.baselineDurationLabel)
        self.baselineDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.baselineDurationSpinBox.setFont(font)
        self.baselineDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.baselineDurationSpinBox.setSuffix("")
        self.baselineDurationSpinBox.setMinimum(0)
        self.baselineDurationSpinBox.setMaximum(10000000)
        self.baselineDurationSpinBox.setSingleStep(1000)
        self.baselineDurationSpinBox.setProperty("value", 1000)
        self.baselineDurationSpinBox.setObjectName("baselineDurationSpinBox")
        self.formLayout_2.setWidget(15, QtWidgets.QFormLayout.FieldRole, self.baselineDurationSpinBox)
        spacerItem2 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(16, QtWidgets.QFormLayout.LabelRole, spacerItem2)
        self.csNameLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.csNameLabel.setFont(font)
        self.csNameLabel.setObjectName("csNameLabel")
        self.formLayout_2.setWidget(17, QtWidgets.QFormLayout.LabelRole, self.csNameLabel)
        self.csNameLineEdit = QtWidgets.QLineEdit(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.csNameLineEdit.setFont(font)
        self.csNameLineEdit.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.csNameLineEdit.setText("")
        self.csNameLineEdit.setObjectName("csNameLineEdit")
        self.formLayout_2.setWidget(17, QtWidgets.QFormLayout.FieldRole, self.csNameLineEdit)
        self.csDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.csDurationLabel.setFont(font)
        self.csDurationLabel.setObjectName("csDurationLabel")
        self.formLayout_2.setWidget(18, QtWidgets.QFormLayout.LabelRole, self.csDurationLabel)
        self.csDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.csDurationSpinBox.setFont(font)
        self.csDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.csDurationSpinBox.setSuffix("")
        self.csDurationSpinBox.setMinimum(0)
        self.csDurationSpinBox.setMaximum(10000000)
        self.csDurationSpinBox.setSingleStep(100)
        self.csDurationSpinBox.setProperty("value", 100)
        self.csDurationSpinBox.setObjectName("csDurationSpinBox")
        self.formLayout_2.setWidget(18, QtWidgets.QFormLayout.FieldRole, self.csDurationSpinBox)
        spacerItem3 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(19, QtWidgets.QFormLayout.LabelRole, spacerItem3)
        self.interstimulusIntervalLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.interstimulusIntervalLabel.setFont(font)
        self.interstimulusIntervalLabel.setObjectName("interstimulusIntervalLabel")
        self.formLayout_2.setWidget(20, QtWidgets.QFormLayout.LabelRole, self.interstimulusIntervalLabel)
        self.interstimulusIntervalSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.interstimulusIntervalSpinBox.setFont(font)
        self.interstimulusIntervalSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.interstimulusIntervalSpinBox.setSuffix("")
        self.interstimulusIntervalSpinBox.setMaximum(10000000)
        self.interstimulusIntervalSpinBox.setSingleStep(500)
        self.interstimulusIntervalSpinBox.setProperty("value", 500)
        self.interstimulusIntervalSpinBox.setObjectName("interstimulusIntervalSpinBox")
        self.formLayout_2.setWidget(20, QtWidgets.QFormLayout.FieldRole, self.interstimulusIntervalSpinBox)
        spacerItem4 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(21, QtWidgets.QFormLayout.LabelRole, spacerItem4)
        self.usNameLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setFamily("MS Sans Serif")
        font.setPointSize(14)
        self.usNameLabel.setFont(font)
        self.usNameLabel.setObjectName("usNameLabel")
        self.formLayout_2.setWidget(22, QtWidgets.QFormLayout.LabelRole, self.usNameLabel)
        self.usNameLineEdit = QtWidgets.QLineEdit(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.usNameLineEdit.setFont(font)
        self.usNameLineEdit.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.usNameLineEdit.setText("")
        self.usNameLineEdit.setObjectName("usNameLineEdit")
        self.formLayout_2.setWidget(22, QtWidgets.QFormLayout.FieldRole, self.usNameLineEdit)
        self.usDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setFamily("MS Sans Serif")
        font.setPointSize(14)
        self.usDurationLabel.setFont(font)
        self.usDurationLabel.setObjectName("usDurationLabel")
        self.formLayout_2.setWidget(23, QtWidgets.QFormLayout.LabelRole, self.usDurationLabel)
        self.usDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.usDurationSpinBox.setFont(font)
        self.usDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.usDurationSpinBox.setSuffix("")
        self.usDurationSpinBox.setMinimum(0)
        self.usDurationSpinBox.setMaximum(10000000)
        self.usDurationSpinBox.setSingleStep(100)
        self.usDurationSpinBox.setProperty("value", 100)
        self.usDurationSpinBox.setObjectName("usDurationSpinBox")
        self.formLayout_2.setWidget(23, QtWidgets.QFormLayout.FieldRole, self.usDurationSpinBox)
        self.subjectAgeLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.subjectAgeLabel.setFont(font)
        self.subjectAgeLabel.setObjectName("subjectAgeLabel")
        self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.subjectAgeLabel)
        self.subjectAgeSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.subjectAgeSpinBox.setFont(font)
        self.subjectAgeSpinBox.setMaximum(999)
        self.subjectAgeSpinBox.setProperty("value", 30)
        self.subjectAgeSpinBox.setObjectName("subjectAgeSpinBox")
        self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.subjectAgeSpinBox)
        self.subjectSexLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.subjectSexLabel.setFont(font)
        self.subjectSexLabel.setObjectName("subjectSexLabel")
        self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.subjectSexLabel)
        self.subjectSexComboBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.subjectSexComboBox.setFont(font)
        self.subjectSexComboBox.setObjectName("subjectSexComboBox")
        self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.subjectSexComboBox)
        spacerItem5 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(6, QtWidgets.QFormLayout.LabelRole, spacerItem5)
        spacerItem6 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.formLayout_2.setItem(3, QtWidgets.QFormLayout.LabelRole, spacerItem6)
        self.sessionNameLineEdit = QtWidgets.QLineEdit(self.scrollAreaWidgetContents)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.sessionNameLineEdit.setFont(font)
        self.sessionNameLineEdit.setMaxLength(12)
        self.sessionNameLineEdit.setObjectName("sessionNameLineEdit")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.sessionNameLineEdit)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.rootHorizontalLayout.addWidget(self.scrollArea)
        self.middleVerticalLine = QtWidgets.QFrame(self.centralwidget)
        self.middleVerticalLine.setFrameShape(QtWidgets.QFrame.VLine)
        self.middleVerticalLine.setFrameShadow(QtWidgets.QFrame.Raised)
        self.middleVerticalLine.setLineWidth(2)
        self.middleVerticalLine.setMidLineWidth(0)
        self.middleVerticalLine.setObjectName("middleVerticalLine")
        self.rootHorizontalLayout.addWidget(self.middleVerticalLine)
        self.rightSide = QtWidgets.QVBoxLayout()
        self.rightSide.setObjectName("rightSide")
        self.graphButtonLayout = QtWidgets.QHBoxLayout()
        self.graphButtonLayout.setObjectName("graphButtonLayout")
        self.lockButton = QtWidgets.QPushButton(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lockButton.sizePolicy().hasHeightForWidth())
        self.lockButton.setSizePolicy(sizePolicy)
        self.lockButton.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.lockButton.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("Images/Unlocked Button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.lockButton.setIcon(icon)
        self.lockButton.setIconSize(QtCore.QSize(100, 75))
        self.lockButton.setObjectName("lockButton")
        self.graphButtonLayout.addWidget(self.lockButton)
        self.playButton = QtWidgets.QPushButton(self.centralwidget)
        self.playButton.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.playButton.sizePolicy().hasHeightForWidth())
        self.playButton.setSizePolicy(sizePolicy)
        self.playButton.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.playButton.setAutoFillBackground(False)
        self.playButton.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("Images/Play Button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.playButton.setIcon(icon1)
        self.playButton.setIconSize(QtCore.QSize(100, 75))
        self.playButton.setCheckable(False)
        self.playButton.setObjectName("playButton")
        self.graphButtonLayout.addWidget(self.playButton)
        spacerItem7 = QtWidgets.QSpacerItem(75, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.graphButtonLayout.addItem(spacerItem7)
        self.stopButton = QtWidgets.QPushButton(self.centralwidget)
        self.stopButton.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.stopButton.sizePolicy().hasHeightForWidth())
        self.stopButton.setSizePolicy(sizePolicy)
        self.stopButton.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.stopButton.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("Images/Stop Button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.stopButton.setIcon(icon2)
        self.stopButton.setIconSize(QtCore.QSize(100, 75))
        self.stopButton.setObjectName("stopButton")
        self.graphButtonLayout.addWidget(self.stopButton)
        spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.graphButtonLayout.addItem(spacerItem8)
        self.sessionInfoLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.sessionInfoLabel.setFont(font)
        self.sessionInfoLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.sessionInfoLabel.setObjectName("sessionInfoLabel")
        self.graphButtonLayout.addWidget(self.sessionInfoLabel)
        spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.graphButtonLayout.addItem(spacerItem9)
        spacerItem10 = QtWidgets.QSpacerItem(20, 100, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.graphButtonLayout.addItem(spacerItem10)
        self.rightSide.addLayout(self.graphButtonLayout)
        self.horizontalLine = QtWidgets.QFrame(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.horizontalLine.sizePolicy().hasHeightForWidth())
        self.horizontalLine.setSizePolicy(sizePolicy)
        self.horizontalLine.setFrameShape(QtWidgets.QFrame.HLine)
        self.horizontalLine.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.horizontalLine.setObjectName("horizontalLine")
        self.rightSide.addWidget(self.horizontalLine)
        self.graphWidget = GraphicsLayoutWidget(self.centralwidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.graphWidget.sizePolicy().hasHeightForWidth())
        self.graphWidget.setSizePolicy(sizePolicy)
        self.graphWidget.setObjectName("graphWidget")
        self.rightSide.addWidget(self.graphWidget)
        self.rootHorizontalLayout.addLayout(self.rightSide)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1324, 37))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.menubar.setFont(font)
        self.menubar.setObjectName("menubar")
        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        self.menuEdit = QtWidgets.QMenu(self.menubar)
        self.menuEdit.setObjectName("menuEdit")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionOpen = QtWidgets.QAction(MainWindow)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.actionOpen.setFont(font)
        self.actionOpen.setObjectName("actionOpen")
        self.actionPrint = QtWidgets.QAction(MainWindow)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.actionPrint.setFont(font)
        self.actionPrint.setObjectName("actionPrint")
        self.actionClose = QtWidgets.QAction(MainWindow)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.actionClose.setFont(font)
        self.actionClose.setObjectName("actionClose")
        self.actionDisplaySettings = QtWidgets.QAction(MainWindow)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.actionDisplaySettings.setFont(font)
        self.actionDisplaySettings.setObjectName("actionDisplaySettings")
        self.actionScreenCapture = QtWidgets.QAction(MainWindow)
        font = QtGui.QFont()
        font.setPointSize(14)
        self.actionScreenCapture.setFont(font)
        self.actionScreenCapture.setObjectName("actionScreenCapture")
        self.menuFile.addAction(self.actionOpen)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionScreenCapture)
        self.menuFile.addAction(self.actionPrint)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionClose)
        self.menuEdit.addAction(self.actionDisplaySettings)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.sessionNameLineEdit, self.subjectAgeSpinBox)
        MainWindow.setTabOrder(self.subjectAgeSpinBox, self.subjectSexComboBox)
        MainWindow.setTabOrder(self.subjectSexComboBox, self.sampleIntervalSpinBox)
        MainWindow.setTabOrder(self.sampleIntervalSpinBox, self.trialCountSpinBox)
        MainWindow.setTabOrder(self.trialCountSpinBox, self.itiSpinBox)
        MainWindow.setTabOrder(self.itiSpinBox, self.itiVarianceSpinBox)
        MainWindow.setTabOrder(self.itiVarianceSpinBox, self.trialDurationSpinBox)
        MainWindow.setTabOrder(self.trialDurationSpinBox, self.baselineDurationSpinBox)
        MainWindow.setTabOrder(self.baselineDurationSpinBox, self.csNameLineEdit)
        MainWindow.setTabOrder(self.csNameLineEdit, self.csDurationSpinBox)
        MainWindow.setTabOrder(self.csDurationSpinBox, self.interstimulusIntervalSpinBox)
        MainWindow.setTabOrder(self.interstimulusIntervalSpinBox, self.usNameLineEdit)
        MainWindow.setTabOrder(self.usNameLineEdit, self.usDurationSpinBox)
        MainWindow.setTabOrder(self.usDurationSpinBox, self.lockButton)
        MainWindow.setTabOrder(self.lockButton, self.playButton)

        #Set up the input manager
        import InputManager as im
        im.initialSetUp(self, icon1, icon)

        #Set up the graph
        import TheGraph as tg
        tg.initialSetUp(self)
        
        #Complete set up of the main window (this file)
        self.subjectSexComboBox.addItem("MALE")
        self.subjectSexComboBox.addItem("FEMALE")
Example #11
0
def playButtonPressed():
    setPlaying(not tg.isPlaying())