Пример #1
0
class CGWMainControl(QGroupBox):
    """
    """
    status_record = ['Begin', 'End']

    def __init__(self, parent=None, parent_ctrl=None):

        QGroupBox.__init__(self, 'Control', parent)

        self.parent_ctrl = parent_ctrl

        self.lab_state = QLabel('Target State')
        self.lab_trans = QLabel('Last Transition')
        self.lab_ctrls = QLabel('Control State')
        #self.box_type = QComboBox(self)
        #self.box_type.addItems(self.LIST_OF_CONFIG_OPTIONS)
        #self.box_type.setCurrentIndex(1)

        icon.set_icons()

        self.but_record = QPushButton(icon.icon_record_sym,
                                      '')  # icon.icon_record
        self.but_record.setAccessibleName(self.status_record[0])
        self.lab_record = QLabel('Recording')

        self.box_state = QComboBox()
        self.but_transition = QPushButton('Unknown')
        self.but_ctrls = QPushButton('Ready')

        self.states = [
            'Select',
        ] + [s.upper() for s in DaqControl.states]
        self.box_state.addItems(self.states)

        if False:
            self.hbox1 = QHBoxLayout()
            self.hbox1.addStretch(1)
            self.hbox1.addWidget(self.lab_record)
            self.hbox1.addWidget(self.but_record)
            self.hbox1.addStretch(1)

            self.hbox2 = QHBoxLayout()
            self.hbox2.addWidget(self.lab_state)
            self.hbox2.addStretch(1)
            self.hbox2.addWidget(self.lab_trans)

            self.hbox3 = QHBoxLayout()
            self.hbox3.addWidget(self.box_state, 0, Qt.AlignCenter)
            self.hbox3.addStretch(1)
            self.hbox3.addWidget(self.but_transition, 0, Qt.AlignCenter)

            self.vbox = QVBoxLayout()
            self.vbox.addLayout(self.hbox1)
            self.vbox.addLayout(self.hbox2)
            self.vbox.addLayout(self.hbox3)

            self.setLayout(self.vbox)

        else:
            self.grid = QGridLayout()
            self.grid.addWidget(self.lab_record, 0, 0, 1, 1)
            self.grid.addWidget(self.but_record, 0, 4, 1, 1)
            self.grid.addWidget(self.lab_state, 1, 0, 1, 1)
            self.grid.addWidget(self.lab_trans, 1, 9, 1, 1)
            self.grid.addWidget(self.box_state, 2, 0, 1, 1)
            self.grid.addWidget(self.but_transition, 2, 9, 1, 1)
            self.grid.addWidget(self.lab_ctrls, 3, 0, 1, 1)
            self.grid.addWidget(self.but_ctrls, 4, 0, 1, 10)
            self.setLayout(self.grid)

        self.set_tool_tips()
        self.set_style()

        self.box_state.currentIndexChanged[int].connect(self.on_box_state)
        self.but_transition.clicked.connect(self.on_but_transition)
        self.but_record.clicked.connect(self.on_but_record)
        self.but_ctrls.clicked.connect(self.on_but_ctrls)

        #self.timer = QTimer()
        #self.timer.timeout.connect(self.on_timeout)
        #self.timer.start(1000)

        self.state = 'undefined'
        self.transition = 'undefined'
        self.ts = 'N/A'
        self.check_state()
        self.check_transition()

#--------------------

    def set_tool_tips(self):
        self.setToolTip('Configuration')
        s = '%s recording' % self.but_record.accessibleName()
        self.but_record.setToolTip(s)
        self.lab_record.setText(s + ':')
        self.box_state.setToolTip('Select desirable state.')
        self.but_transition.setToolTip('Last transition info.')
        self.but_ctrls.setToolTip('State info.')

#--------------------

    def set_style(self):
        self.setStyleSheet(style.qgrbox_title)
        self.lab_record.setFixedWidth(100)
        self.but_record.setFixedSize(50, 50)
        self.but_record.setIconSize(QSize(48, 48))

        self.but_ctrls.setStyleSheet(style.styleButtonGood)
        self.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
        self.layout().setContentsMargins(4, 4, 4, 4)
        self.setMinimumSize(270, 140)

#--------------------

    def sizeHint(self):
        return QSize(270, 160)

#--------------------

    def on_box_state(self, ind):
        if not ind: return
        state = self.states[ind]
        logger.info(
            'CGWMainDetector.on_box_state -> daq_control().setState %s' %
            state)
        #self.parent_ctrl.kick_zmq()
        daq_control().setState(state.lower())
        logger.debug('command daq_control().setState is committed...')

#--------------------

    def on_but_transition(self):
        #logger.debug('on_but_transition') # NO ACTION')
        self.check_transition()

#--------------------

    def on_but_ctrls(self):
        logger.debug('on_but_ctrls')
        self.check_state()

#--------------------

    def on_cbx_runc(self, ind):
        #if self.cbx.hasFocus() :
        cbx = self.cbx_runc
        tit = cbx.text()
        self.cbx_runc.setStyleSheet(
            style.styleGreenish if cbx.isChecked() else style.styleYellowBkg)
        msg = 'Check box "%s" is set to %s' % (tit, cbx.isChecked())
        logger.info(msg)

#--------------------

    def on_but_record(self):
        txt = self.but_record.accessibleName()
        logger.debug('TBD - on_but_record %s' % txt)
        ind = self.status_record.index(txt)
        ico = icon.icon_record_sym if ind==1 else\
              icon.icon_record
        self.but_record.setIcon(ico)
        self.but_record.setAccessibleName(
            self.status_record[0 if ind == 1 else 1])

        s = '%s recording' % self.but_record.accessibleName()
        self.but_record.setToolTip(s)
        self.lab_record.setText(s + ':')

#--------------------

    def check_state(self):
        #logger.debug('CGWMainDetector.check_state -> daq_control().getState()')
        state = daq_control().getState()
        if state is None: return
        if state == self.state: return
        self.set_but_ctrls(state)

#--------------------

    def set_but_ctrls(self, s):
        self.ts = gu.str_tstamp(fmt='%H:%M:%S',
                                time_sec=None)  # '%Y-%m-%dT%H:%M:%S%z'
        self.state = s
        #self.but_state.setText('%s since %s' % (s.upper(), self.ts))
        self.but_ctrls.setText(s.upper())
        self.parent_ctrl.wpart.set_buts_enable(
            s.upper())  # enable/disable button plat in other widget

#--------------------

#    def on_timeout(self) :
#        #logger.debug('CGWMainDetector Timeout %.3f sec' % time())
#        self.ts = gu.str_tstamp(fmt='%H:%M:%S', time_sec=None) # '%Y-%m-%dT%H:%M:%S%z'
#        #self.lab_state.setText('Control state on %s' % self.ts)
#        self.check_transition()
#        self.timer.start(1000)

#--------------------

    def check_transition(self):
        """Uses getStatus() to get last transition and set the info button status.
        """
        logger.debug('CGWMainDetector.check_transition')
        #t0_sec = time() # takes 0.001s
        transition, state, config_alias = daq_control().getStatus(
        )  # submits request to check transition, state and config_alias
        logger.debug(
            'CGWMainDetector.check_transition transition:%s state:%s config_alias:%s'
            % (str(transition), str(state), str(config_alias)))
        self.but_transition.setText(
            transition.upper())  # + ' since %s' % self.ts)
        #state = daq_control().getState()
        #self.but_state.setText(state.upper() + ' since %s' % self.ts)

#--------------------

    def set_transition(self, s):
        #ts = gu.str_tstamp(fmt='%H:%M:%S', time_sec=None) # '%Y-%m-%dT%H:%M:%S%z'
        #self.but_transition.setText('%s since %s' % (s.upper(), ts))
        self.but_transition.setText(s.upper())

#--------------------

    if __name__ == "__main__":

        def resizeEvent(self, e):
            print('CGWMainControl.resizeEvent: %s' % str(self.size()))
Пример #2
0
class CGWMainTabUser(QGroupBox):

    _name = 'CGWMainTabUser'

    s_running, s_paused = 'running', 'paused'
    s_play_start, s_play_pause, s_play_wait = 'Start', 'Pause', 'Wait'

    status_record = ['Begin', 'End', 'Wait']

    def __init__(self, **kwargs):

        parent = kwargs.get('parent', None)
        parent_ctrl = kwargs.get('parent_ctrl', None)

        #QWidget.__init__(self, parent=None)
        QGroupBox.__init__(self, 'Control', parent)

        logger.debug('In %s' % self._name)

        icon.set_icons()

        #self.hbox = self.hbox_test()
        self.hbox = self.hbox_buttons()

        parent_ctrl.wctrl = self

        self.setLayout(self.hbox)

        self.set_style()
        self.set_tool_tips()

#------------------------------

    def set_but_ctrls(self, s_state):
        """interface method called from CGWMain on zmq poll
        """
        logger.debug('In %s.set_but_ctrls received state: %s' %
                     (self._name, s_state))
        state = s_state.lower()

        if state == self.s_running:
            self.but_play.setIcon(icon.icon_playback_pause_sym)
            self.but_play.setAccessibleName(self.s_play_pause)

        else:  # elif state == self.s_paused :
            self.but_play.setIcon(icon.icon_playback_start_sym)
            self.but_play.setAccessibleName(self.s_play_start)

        self.but_play.setIconSize(QSize(48, 48))
        self.set_tool_tips()
        self.set_but_play_enabled(True)  # unlock play button

#------------------------------

    def set_transition(self, s_transition):
        """interface method called from CGWMain on zmq poll
        """
        logger.debug('In %s.set_transition received state: %s' %
                     (self._name, s_transition))

#------------------------------

    def set_tool_tips(self):
        self.but_play.setToolTip('%s running' % self.but_play.accessibleName())
        self.but_record.setToolTip('%s recording' %
                                   self.but_record.accessibleName())

#--------------------

    def sizeHint(self):
        return QSize(110, 70)

#--------------------

    def set_style(self):

        self.setStyleSheet(style.qgrbox_title)
        #self.setCheckable(True)
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.layout().setSpacing(0)
        self.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
        self.setMinimumSize(90, 60)
        #self.setFixedHeight(70)

        self.but_play.setFixedSize(50, 50)
        self.but_record.setFixedSize(50, 50)

        self.but_play.setIconSize(QSize(48, 48))
        self.but_record.setIconSize(QSize(48, 48))

    def closeEvent(self, e):
        logger.debug('%s.closeEvent' % self._name)

        try:
            pass
            #self.wpart.close()
            #self.wctrl.close()
        except Exception as ex:
            print('Exception: %s' % ex)

    #def resizeEvent(self, e):
    #logger.debug('resizeEvent', self._name)

    #def moveEvent(self, e) :
    #logger.debug('moveEvent', self._name)

    def hbox_buttons(self):
        hbox = QHBoxLayout()

        daq_ctrl = daq_control()
        state = daq_ctrl.getState() if daq_ctrl is not None else 'unknown'
        logger.debug('current state is "%s"' % state)
        is_running = state == self.s_running

        self.but_play   = QPushButton(icon.icon_playback_pause_sym if is_running else\
                                      icon.icon_playback_start_sym, '')
        self.but_record = QPushButton(icon.icon_record_sym,
                                      '')  # icon.icon_record

        self.but_play  .setAccessibleName(self.s_play_pause if is_running else\
                                          self.s_play_start)
        self.but_record.setAccessibleName(self.status_record[0])

        self.but_play.clicked.connect(self.on_but_play)
        self.but_record.clicked.connect(self.on_but_record)

        hbox.addWidget(self.but_play)
        hbox.addWidget(self.but_record)

        #self.but_play.setStyleSheet('QPushButton{border: 0px solid;}')
        #self.but_record.setStyleSheet("background-image: url('image.jpg'); border: none;")
        return hbox

    def on_but_play(self):
        txt = self.but_play.accessibleName()
        logger.debug('on_but_play %s' % txt)
        #ind = self.status_play.index(txt)
        #ico = icon.icon_playback_start_sym if txt==self.status_play_start else icon.icon_wait
        #icon.icon_playback_pause_sym

        ico = icon.icon_wait
        self.but_play.setIconSize(
            QSize(32, 32) if ico == icon.icon_wait else QSize(48, 48))
        self.but_play.setAccessibleName(self.s_play_wait)
        #self.but_play.setAccessibleName(self.status_play[0 if ind==1 else 1])

        self.but_play.setIcon(ico)
        self.set_tool_tips()

        daq_ctrl = daq_control()
        state = daq_ctrl.getState() if daq_ctrl is not None else 'unknown'
        logger.debug('current state is %s' % state)

        cmd = self.s_paused if txt == self.s_play_pause else self.s_running

        daq_ctrl = daq_control()
        if daq_ctrl is not None:
            daq_ctrl.setState(cmd)
            logger.debug('daq_control.setState("%s")' % cmd)
        else:
            logger.warning('daq_control() is None')

        self.set_but_play_enabled(
            False)  # lock button untill RUNNING status is received

    def set_but_play_enabled(self, is_running=True):
        self.but_play.setEnabled(is_running)
        self.but_play.setFlat(not is_running)

    def on_but_record(self):
        txt = self.but_record.accessibleName()
        logger.debug('TBD - on_but_record %s' % txt)
        ind = self.status_record.index(txt)
        ico = icon.icon_record_sym if ind==1 else\
              icon.icon_record
        self.but_record.setIcon(ico)
        self.but_record.setAccessibleName(
            self.status_record[0 if ind == 1 else 1])
        self.set_tool_tips()

#------------------------------
#------------------------------
#------------------------------
#------------------------------

    if __name__ == "__main__":

        def hbox_test(self):
            list_of_icons = [\
              icon.icon_eject\
            , icon.icon_eject_sym\
            , icon.icon_playback_pause\
            , icon.icon_playback_pause_sym\
            , icon.icon_playback_start\
            , icon.icon_playback_start_rtl\
            , icon.icon_playback_start_sym_rtl\
            , icon.icon_playback_start_sym\
            , icon.icon_playback_stop\
            , icon.icon_playback_stop_sym\
            , icon.icon_record\
            , icon.icon_record_sym\
            , icon.icon_seek_backward\
            , icon.icon_seek_backward_rtl\
            , icon.icon_seek_backward_sym_rtl\
            , icon.icon_seek_backward_sym\
            , icon.icon_seek_forward\
            , icon.icon_seek_forward_rtl\
            , icon.icon_seek_forward_sym_rtl\
            , icon.icon_seek_forward_sym\
            , icon.icon_skip_backward\
            , icon.icon_skip_backward_rtl\
            , icon.icon_skip_backward_sym_rtl\
            , icon.icon_skip_backward_sym\
            , icon.icon_skip_forward\
            , icon.icon_skip_forward_rtl\
            , icon.icon_skip_forward_sym_rtl\
            , icon.icon_skip_forward_sym\
            , icon.icon_view_subtitles_sym\
            ]
            hbox = QHBoxLayout()
            for ico in list_of_icons:
                but = QPushButton(ico, '')
                but.setFixedWidth(25)
                hbox.addWidget(but)
            return hbox