Example #1
0
 def load_settings(self, settings):
     if settings is not None:
         cue = Application().cue_model.get(settings['target_id'])
         if cue is not None:
             self.cue_id = settings['target_id']
             self.seekEdit.setTime(
                 QTime.fromMSecsSinceStartOfDay(settings['time']))
             self.seekEdit.setMaximumTime(
                 QTime.fromMSecsSinceStartOfDay(cue.media.duration))
             self.cueLabel.setText(cue.name)
Example #2
0
    def load_settings(self, settings):
        if settings is not None:
            cue = Application().cue_model.get(settings.get('target_id'))
            if cue is not None:
                self.cue_id = settings['target_id']
                self.seekEdit.setMaximumTime(
                    QTime.fromMSecsSinceStartOfDay(cue.media.duration))
                self.cueLabel.setText(cue.name)

            self.seekEdit.setTime(
                QTime.fromMSecsSinceStartOfDay(settings.get('time', 0)))
Example #3
0
    def __init__(self, parent, document):
        super(DlgProperties, self).__init__(parent)

        self.setupUi(self)

        self.document = document

        self.setWindowTitle('{} Properties'.format(self.document.title))

        # Sampling rate
        self.tableWidget.item(0, 1).setText('{:} kHz ({:,} Hz)'.format(
            self.document.sampling_rate / 1000.0, self.document.sampling_rate))

        # Bit depth
        self.tableWidget.item(1, 1).setText('{}-bit'.format(
            self.document.bytes_per_sample * 8))

        # Number of channels
        self.tableWidget.item(2, 1).setText(str(self.document.channels))

        # Duration
        duration = QTime.fromMSecsSinceStartOfDay(1000 * self.document.frames /
                                                  self.document.sampling_rate)
        self.tableWidget.item(3, 1).setText('{:02}:{:02}:{:02}.{:03}'.format(
            duration.hour(), duration.minute(), duration.second(),
            duration.msec()))
Example #4
0
    def select_cue(self):
        if self.cueDialog.exec_() == self.cueDialog.Accepted:
            cue = self.cueDialog.selected_cues()[0]

            self.cue_id = cue.id
            self.seekEdit.setMaximumTime(
                QTime.fromMSecsSinceStartOfDay(cue.media.duration))
            self.cueLabel.setText(cue.name)
Example #5
0
    def select_cue(self):
        if self.cueDialog.exec_() == self.cueDialog.Accepted:
            cue = self.cueDialog.selected_cue()

            if cue is not None:
                self.cue_id = cue.id
                self.seekEdit.setMaximumTime(
                    QTime.fromMSecsSinceStartOfDay(cue.media.duration))
                self.cueLabel.setText(cue.name)
Example #6
0
    def _selectReminder(self):
        reminder: Reminder = self._getCurrentReminder()
        if reminder is None:
            self.ui.daysBox.setEnabled( False )
            self.ui.hoursEdit.setEnabled( False )
            self.ui.removePB.setEnabled( False )
            return

        self.ui.daysBox.setEnabled( True )
        self.ui.hoursEdit.setEnabled( True )
        self.ui.removePB.setEnabled( True )

        timeOffset = reminder.splitTimeOffset()
        self.ui.daysBox.setValue( timeOffset[0] )
        time = QTime.fromMSecsSinceStartOfDay( timeOffset[1] * 1000 )
        self.ui.hoursEdit.setTime( time )
Example #7
0
    def __init__(self, parent):
        super(DlgNew, self).__init__(parent)

        self.setupUi(self)

        # Read configuration settings
        settings = QSettings()

        # TODO - need to figure out DDV/DDX
        self.sampling_rate = settings.value(
            Settings.DOC_SAMPLING_RATE,
            defaultValue=Settings.DOC_SAMPLING_RATE_DFLT)
        self.rate_comboBox.setCurrentText('{} Hz'.format(self.sampling_rate))

        # TODO - need to figure out DDV/DDX
        self.bytes_per_sample = settings.value(
            Settings.DOC_BYTES_PER_SAMPLE,
            defaultValue=Settings.DOC_BYTES_PER_SAMPLE_DFLT)
        self.bitd_16bit_radioButton.setChecked(self.bytes_per_sample == 2)
        self.bitd_24bit_radioButton.setChecked(self.bytes_per_sample == 3)
        self.bitd_32bitfloat_radioButton.setChecked(self.bytes_per_sample == 4)

        # TODO - need to figure out DDV/DDX
        self.channels = settings.value(Settings.DOC_CHANNELS,
                                       defaultValue=Settings.DOC_CHANNELS_DFLT)
        self.chan_1_radioButton.setChecked(self.channels == 1)
        self.chan_2_radioButton.setChecked(self.channels == 2)

        # TODO - need to figure out DDV/DDX
        self.frames = settings.value(Settings.DOC_FRAMES,
                                     defaultValue=Settings.DOC_FRAMES_DFLT)
        duration_msec = 1000 * self.frames / self.sampling_rate  # TODO - fix this
        duration = QTime.fromMSecsSinceStartOfDay(duration_msec)
        self.idur_hrs_spinBox.setValue(duration.hour())
        self.idur_mins_spinBox.setValue(duration.minute())
        self.idur_secs_spinBox.setValue(duration.second())
        self.idur_msec_spinBox.setValue(duration.msec())

        self.max_freq_fmt = self.rate_maxfreq_label.text()

        self.update_ui()
 def _to_qtime(self, m_seconds):
     return QTime.fromMSecsSinceStartOfDay(m_seconds)
Example #9
0
 def load_settings(self, settings):
     self.functionCombo.setCurrentText(settings.get('preset', ''))
     self.functionDuration.setTime(
         QTime.fromMSecsSinceStartOfDay(settings.get('duration', 0)))
 def _to_qtime(self, time):
     return QTime.fromMSecsSinceStartOfDay(time * 100)
 def _to_qtime(self, m_seconds):
     return QTime.fromMSecsSinceStartOfDay(m_seconds)
Example #12
0
def connectSignals():
    # Print messages to statusbar and console
    camera.device_status[str].connect(ui.statusbar.showMessage)
    #camera.device_status[str].connect(print)
    camera.device_name[str].connect(lambda val: ui.camLabel.setText("Preview (" + val + "):"))
    #disposablecam.status[str].connect(print)
    recordingcam.status[str].connect(ui.statusbar.showMessage)
    extractcam.status[str].connect(ui.statusbar.showMessage)

    if settingswatchdog.addPath("settings.json"):

        def reloadSettings():
            fimsettings.loadSettings()
            pullSettings()
            # Apparantly gedit rewrites text files when saving them,
            # causing QFileSystemWatcher stopping to monitor them
            # This re-adds the file after reloading the modified settings.
            # This definitively does not happen on win32,
            # not sure about darwin and other unixoids, though.
            # Season to taste.
            if sys.platform not in ["win32", "darwin"]:
                settingswatchdog.addPath("settings.json")

        settingswatchdog.fileChanged[str].connect(reloadSettings)
        logger.info("Watching settings.json for changes.")

    # Handle QActions
    ui.actionSnapshot.triggered.connect(saveSnapshot)
    ui.actionRefresh.triggered.connect(bootstrapCam)
    ui.actionRecord.toggled[bool].connect(recordVideo)
    ui.actionExtract_Frames_from_Video.toggled[bool].connect(extractFrames)
    ui.actionLoad_Parameters.triggered.connect(openParamFile)
    ui.actionSave_Parameters.triggered.connect(writeParamFile)
    ui.actionSettings.triggered.connect(lambda: open_extern())
    ui.actionSettings.triggered.connect(lambda: logger.info("Opening settings.json in external editor."))
    # Handle pyloncom & pylonproc signals
    recordingcam.timelimit_reached.connect(ui.actionRecord.toggle)
    recordingcam.fimjson_path[str].connect(lambda val: pushSettings(os.path.dirname(val),
                                                                    os.path.basename(val),
                                                                    True
                                                                    )
                                           )
    recordingcam.frame_written.connect(lambda: ui.progressBar.setValue(recordingcam.framecount))
    recordingcam.frame_written.connect(lambda: ui.progressBar.setFormat(QTime.fromMSecsSinceStartOfDay(
        math.floor(recordingcam.framecount /
                   recordingcam.fps *
                   1000)).toString()))
    extractcam.max_frames.connect(ui.progressBar.setMaximum)
    extractcam.timelimit_reached.connect(ui.actionExtract_Frames_from_Video.toggle)
    extractcam.frame_written.connect(lambda: ui.progressBar.setValue(extractcam.framecount))
    extractcam.frame_written.connect(lambda: ui.progressBar.setFormat(str(extractcam.framecount) +
                                                                      '/' +
                                                                      str(extractcam.maxframes)))

    app.aboutToQuit.connect(pcthread.exit)
    pcthread.started.connect(lambda: previewcam.startProcessing(camera.frame_grabbed))
    # Connect widgets to cam classes and SettingsHandler
    # Replace lambda by functools.partial?
    ui.ExpTimeSpinBox.valueChanged[int].connect(
        lambda val: camera.baslerace.setCamAttr(EXPOSURETIME, val)
    )
    ui.ExpTimeSpinBox.valueChanged[int].connect(
        lambda val: fimsettings.parameters.__setitem__('Exposure Time', val)
    )
    # camera.is_grabbing.connect(lambda: ui.statusbar.showMessage("grabbing..."))
    ui.ExpAutoChkBx.toggled[bool].connect(toggleExposureAuto)
    #ui.FpsEnableChkBx.toggled[bool].connect(
    #    lambda val: camera.baslerace.setCamAttr('AcquisitionFrameRateEnable', int(val))
    #)
    ui.BgChkBx.toggled[bool].connect(
        lambda val: setattr(camera.baslerace, 'subtractbg', val)
    )
    ui.CutoffChkBx.toggled[bool].connect(
        lambda val: setattr(camera.baslerace, 'cutoff', val)
    )
    ui.StretchHistoChkBx.toggled[bool].connect(
        lambda val: setattr(camera.baslerace, 'stretchhistogram', val)
    )
    ui.RecalcBgBtn.pressed.connect(
        lambda: camera.baslerace.resetbackground(ui.BgSpinBox.value())
    )
    ui.FpsDSpinBox.valueChanged[float].connect(
        lambda val: camera.baslerace.setCamAttr(ACQUISITIONFRAMERATE, val)
    )
    ui.GammaDSpinBox.valueChanged[float].connect(
        lambda val: camera.baslerace.setCamAttr('Gamma', val)
    )
    if not camera.baslerace.emulated:
        ui.GainDSpinBox.valueChanged[float].connect(
            lambda val: camera.baslerace.setCamAttr('Gain', val)
        )
        ui.BlacklvlDSpinBox.valueChanged[float].connect(
            lambda val: camera.baslerace.setCamAttr('BlackLevel', val)
        )
    ui.CutoffSpinBox.valueChanged[int].connect(
        lambda val: setattr(camera.baslerace, 'threshold', val)
    )
    ui.CutoffSpinBox.valueChanged[int].connect(
        lambda val: logger.debug("Cutoff Threshold: " + str(val))
    )
    ui.StretchHistoDSpinBox.valueChanged[float].connect(
        lambda val: setattr(camera.baslerace, 'stretchfactor', val)
    )
    ui.StretchHistoDSpinBox.valueChanged[float].connect(
        lambda val: logger.debug("Histogram Stretch Factor: " + str(val))
    )
    # Doesn't work without lambda? o.รด
    ui.FpsDSpinBox.valueChanged[float].connect(lambda val: recordingcam.changeFps(val))
    # Update recording duration when fps gets changed
    ui.FpsDSpinBox.valueChanged.connect(lambda val: recordingcam.msecsToFrames(QTimeToMsecs(ui.RecDurTEdit.time())))
    ui.RecDurTEdit.timeChanged.connect(lambda val: recordingcam.msecsToFrames(QTimeToMsecs(val)))
    app.aboutToQuit.connect(pushSettings)