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()))
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