def connect_hwobj( self, sender, signal, slot, instance_filter=False, should_cache=True ): if sys.version_info > (3, 0): signal = str(signal.decode("utf8") if isinstance(signal, bytes) else signal) else: signal = str(signal) if signal[0].isdigit(): pysignal = signal[0] == "9" signal = signal[1:] else: pysignal = True if not isinstance(sender, QtImport.QObject): if isinstance(sender, HardwareObject): sender.connect(signal, slot) return else: _sender = emitter(sender) else: _sender = sender if instance_filter: self.connect_signal_slot_filter( _sender, pysignal and QtImport.pyqtSignal(signal) or QtImport.pyqtSignal(signal), slot, should_cache, ) else: # Porting to Qt5 getattr(_sender, signal).connect(slot)
def __init__(self, *args): BaseWidget.__init__(self, *args) # Hardware objects ---------------------------------------------------- self.plate_manipulator_hwobj = None # Internal values ----------------------------------------------------- self.num_cols = None self.num_rows = None self.num_drops = None self.current_location = None self.plate_content = None self.xtal_map = None # Properties ---------------------------------------------------------- self.add_property("mnemonic", "string", "") self.add_property("icons", "string", "") # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self.plate_navigator_widget = PlateNavigatorWidget(self) self.crims_widget = QtImport.load_ui_file( "plate_crims_widget_layout.ui") # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.plate_navigator_widget) _main_vlayout.addWidget(self.crims_widget) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) # Qt signal/slot connections ------------------------------------------ self.crims_widget.search_button.clicked.connect( self.search_button_clicked) self.crims_widget.move_button.clicked.connect( self.move_to_xtal_clicked) self.crims_widget.abort_button.clicked.connect(self.abort_clicked) self.crims_widget.xtal_treewidget.currentItemChanged.connect( self.xtal_treewidget_current_item_changed) # Other --------------------------------------------------------------- self.xtal_image_graphicsscene = QtImport.QGraphicsScene(self) self.crims_widget.xtal_image_graphicsview.setScene( self.xtal_image_graphicsscene) self.xtal_image_pixmap = QtImport.QPixmap() self.xtal_image_graphics_pixmap = QtImport.QGraphicsPixmapItem() self.xtal_image_graphicsscene.addItem(self.xtal_image_graphics_pixmap)
def test_focus_mode(self): if not hasattr(self.beamline_test_hwobj, "get_focus_mode"): self.test_focus_page.setEnabled(False) return active_mode, beam_size = self.beamline_test_hwobj.get_focus_mode() if active_mode is None: self.beamline_test_widget.focus_mode_label.setText( "<font color='red'>No focusing mode detected<font>") else: self.beamline_test_widget.focus_mode_label.setText( "<font color='black'>%s mode detected<font>" % active_mode) focus_modes = self.beamline_test_hwobj.get_focus_mode_names() focus_modes_table = self.beamline_test_widget.focus_modes_table focus_modes_combo = self.beamline_test_widget.focus_modes_combo if focus_modes: focus_modes_table.setColumnCount(len(focus_modes)) focus_modes_combo.clear() hor_labels = QtImport.QStringList(focus_modes) focus_modes_table.setHorizontalHeaderLabels(hor_labels) for col, mode in enumerate(focus_modes): focus_modes_combo.addItem(mode) if active_mode: focus_modes_combo.setCurrentIndex( focus_modes_combo.findText(active_mode)) else: focus_modes_combo.setCurrentIndex(-1) focus_motors_list = self.beamline_test_hwobj.get_focus_motors() if focus_motors_list: ver_labels = QtImport.QStringList() focus_modes_table.setRowCount(len(focus_motors_list)) for row, motor in enumerate(focus_motors_list): ver_labels.append(motor["motorName"]) for col, mode in enumerate(focus_modes): item_text = "%.3f/%.3f" % ( motor["focusingModes"][mode], motor["position"], ) res = mode in motor["focMode"] if res: temp_table_item = QtImport.QTableWidgetItem(item_text) temp_table_item.setBackground(Colors.LIGHT_GREEN) else: temp_table_item = QtImport.QTableWidgetItem(item_text) temp_table_item.setBackground(Colors.LIGHT_RED) focus_modes_table.setItem(row, col, temp_table_item) focus_modes_table.setVerticalHeaderLabels(ver_labels)
def paint(self, painter, option, widget): pen = QtImport.QPen(QtImport.Qt.SolidLine) pen.setWidth(1) pen.setColor(QtImport.Qt.black) painter.setPen(pen) if self.isSelected(): brush_color = QtImport.QColor(204, 255, 204) else: brush_color = QtImport.QColor(203, 212, 246) self.custom_brush.setColor(brush_color) painter.setBrush(self.custom_brush) painter.drawEllipse(-20, -20, 40, 40) paint_rect = QtImport.QRect(-20, -20, 40, 40) painter.drawText(paint_rect, QtImport.Qt.AlignCenter, str(self.index + 1))
def init_view(self): self.chan_config = HWR.beamline.online_processing.ssx_setup.get_current_chip_config( ) self.chan_table.blockSignals(True) self.chan_table.setColumnCount(3) for index, header_text in enumerate(("Name", "Delay", "Length")): self.chan_table.setHorizontalHeaderItem( index, QtImport.QTableWidgetItem(header_text)) if index > 0: self.chan_table.resizeColumnToContents(index) self.chan_table.setRowCount(self.chan_config["num_channels"]) self.chan_seq = [None] * self.chan_config["num_channels"] self.chan_table.setFixedHeight(30 * (self.chan_config["num_channels"] + 1)) for index in range(self.chan_config["num_channels"]): combo = QtImport.QComboBox() combo.activated.connect(self.chan_seq_combo_activated) for chan_name in self.chan_config["channels"].keys(): combo.addItem(chan_name) combo.addItem("") combo.setCurrentIndex(-1) self.chan_table.setCellWidget(index, 0, combo) self.chan_combo_items.append(combo) for col in (1, 2): self.chan_table.setItem(index, col, QtImport.QTableWidgetItem("")) if index < len(self.chan_config["default_seq"]): def_chan_item_name = self.chan_config["default_seq"][index] combo.setCurrentIndex(combo.findText(def_chan_item_name)) self.chan_table.setItem( index, 1, QtImport.QTableWidgetItem( str(self.chan_config["channels"][def_chan_item_name] [0]))) self.chan_table.setItem( index, 2, QtImport.QTableWidgetItem( str(self.chan_config["channels"][def_chan_item_name] [1]))) self.chan_table.blockSignals(False) self.refresh_chan_sequence()
def __init__(self, *args): BaseWidget.__init__(self, *args) # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- # Properties ---------------------------------------------------------- self.add_property("formatString", "formatString", "###.##") # Signals ------------------------------------------------------------ # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self.group_box = QtImport.QGroupBox("Transmission", self) current_label = QtImport.QLabel("Current:", self.group_box) current_label.setFixedWidth(75) self.transmission_ledit = QtImport.QLineEdit(self.group_box) self.transmission_ledit.setReadOnly(True) set_to_label = QtImport.QLabel("Set to:", self.group_box) self.new_value_ledit = QtImport.QLineEdit(self.group_box) # Layout -------------------------------------------------------------- _group_box_gridlayout = QtImport.QGridLayout(self.group_box) _group_box_gridlayout.addWidget(current_label, 0, 0) _group_box_gridlayout.addWidget(self.transmission_ledit, 0, 1) _group_box_gridlayout.addWidget(set_to_label, 1, 0) _group_box_gridlayout.addWidget(self.new_value_ledit, 1, 1) _group_box_gridlayout.setSpacing(0) _group_box_gridlayout.setContentsMargins(1, 1, 1, 1) _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 2, 2) _main_vlayout.addWidget(self.group_box) # SizePolicies -------------------------------------------------------- # Other --------------------------------------------------------------- self._update_ledit_color(Colors.LIGHT_GREEN) self.validator = QtImport.QDoubleValidator(0, 100, 2, self.new_value_ledit) self.new_value_ledit.setToolTip("Transmission limits 0 : 100 %") self.instance_synchronize("transmission_ledit", "new_value_ledit") if HWR.beamline.transmission is not None: # Qt signal/slot connections ------------------------------------------ self.new_value_ledit.returnPressed.connect( self.current_value_changed) self.new_value_ledit.textChanged.connect(self.input_field_changed) self.connect(HWR.beamline.transmission, "stateChanged", self._state_changed) self.connect(HWR.beamline.transmission, "valueChanged", self._value_changed) self.connected() else: self.disconnected()
class SpinBoxEvent(QtImport.QObject): returnPressedSignal = QtImport.pyqtSignal() contextMenuSignal = QtImport.pyqtSignal() def eventFilter(self, obj, event): if event.type() == QtImport.QEvent.KeyPress: if event.key() in [QtImport.Qt.Key_Enter, QtImport.Qt.Key_Return]: self.returnPressedSignal.emit() elif event.type() == QtImport.QEvent.MouseButtonRelease: self.returnPressedSignal.emit() elif event.type() == QtImport.QEvent.ContextMenu: self.contextMenuSignal.emit() return False
def __init__(self, parent=None, name="log_bar_widget", fl=0): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) self.text_edit = QtImport.QTextEdit(self) self.text_edit.setAcceptRichText(True) self.text_edit.setReadOnly(True) self.text_edit.setFontWeight(QtImport.QFont.Bold) _main_hlayout = QtImport.QHBoxLayout(self) _main_hlayout.addWidget(self.text_edit) _main_hlayout.setSpacing(0) _main_hlayout.setContentsMargins(0, 0, 0, 0)
def __init__(self, parent=None, name="advanced_parameters_widget"): QtImport.QWidget.__init__(self, parent) # Internal values ----------------------------------------------------- self._data_collection = None self._tree_view_item = None self._acquisition_mib = None # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- _dc_parameters_widget = QtImport.QWidget(self) self._data_path_widget = DataPathWidget(_dc_parameters_widget) self._acq_widget = AcquisitionWidget(_dc_parameters_widget, layout="horizontal") # Layout -------------------------------------------------------------- _dc_parameters_widget_layout = QtImport.QVBoxLayout( _dc_parameters_widget) _dc_parameters_widget_layout.addWidget(self._data_path_widget) _dc_parameters_widget_layout.addWidget(self._acq_widget) _dc_parameters_widget_layout.setSpacing(2) _dc_parameters_widget_layout.addStretch(10) _dc_parameters_widget_layout.setContentsMargins(0, 0, 0, 0) _main_hlayout = QtImport.QHBoxLayout(self) _main_hlayout.addWidget(_dc_parameters_widget) _main_hlayout.setSpacing(2) _main_hlayout.setContentsMargins(2, 2, 2, 2) _main_hlayout.addStretch(0) # Qt signal/slot connections ------------------------------------------ # self._acq_widget.acqParametersChangedSignal.\ # connect(self.acq_parameters_changed) # self._data_path_widget.pathTemplateChangedSignal.\ # connect(self.acq_parameters_changed) self._acq_widget.madEnergySelectedSignal.connect( self.mad_energy_selected) # Ohter --------------------------------------------------------------- self._acq_widget.use_osc_start(False) self._acq_widget.acq_widget_layout.mad_cbox.hide() self._acq_widget.acq_widget_layout.energies_combo.hide() self._acq_widget.acq_widget_layout.shutterless_cbx.hide()
def __init__(self, *args): BaseWidget.__init__(self, *args) # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------ # Slots --------------------------------------------------------------- # Hardware objects ---------------------------------------------------- # Internal values ----------------------------------------------------- # Graphic elements ---------------------------------------------------- self.main_groupbox = QtImport.QGroupBox("Door interlock", self) self.main_groupbox.setAlignment(QtImport.Qt.AlignCenter) self.state_label = QtImport.QLabel("<b>unknown</b>", self.main_groupbox) Colors.set_widget_color(self.state_label, self.STATES["unknown"]) self.state_label.setAlignment(QtImport.Qt.AlignCenter) self.state_label.setFixedHeight(24) self.unlock_door_button = QtImport.QPushButton( Icons.load_icon("EnterHutch"), "Unlock", self.main_groupbox) # Layout -------------------------------------------------------------- _main_gbox_vlayout = QtImport.QVBoxLayout(self.main_groupbox) _main_gbox_vlayout.addWidget(self.state_label) _main_gbox_vlayout.addWidget(self.unlock_door_button) _main_gbox_vlayout.setSpacing(2) _main_gbox_vlayout.setContentsMargins(4, 4, 4, 4) _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.main_groupbox) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.unlock_door_button.clicked.connect(self.unlock_doors) # Other --------------------------------------------------------------- self.state_label.setToolTip("Shows the current door state") self.unlock_door_button.setToolTip("Unlocks the doors") self.connect(api.door_interlock, "doorInterlockStateChanged", self.state_changed) api.door_interlock.update_values()
def __init__(self, parent=None, name=None, fl=0): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if not name: self.setObjectName("OptimisationParametersWidgetLayout") # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- # Graphic elements ---------------------------------------------------- self.opt_param_widget = QtImport.load_ui_file( "optimization_parameters_widget_layout.ui" ) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.opt_param_widget) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) # Size policies ------------------------------------------------------- # Other --------------------------------------------------------------- self.setAttribute(QtImport.Qt.WA_WState_Polished)
def create_dg_channels_list(self, num_exp): chip_config = self.ssx_control_hwobj.get_config() # set number of columns self.ssx_widget_layout.dg_channels_table.setColumnCount(num_exp) # add checkboxes if a new number of exposures is bigger than the old one dg_channels_list = [] if num_exp > chip_config["old_num_of_exp"]: for row in range(0, 4): checkbox_item = QtImport.QTableWidgetItem() checkbox_item.setFlags( QtImport.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled ) checkbox_item.setCheckState(QtImport.Qt.Unchecked) # add checkboxes to the list dg_channels_list.append(checkbox_item) self.ssx_widget_layout.dg_channels_table.setItem( row, num_exp - 1, checkbox_item ) # remove checkboxes from the list if a new number of exposures is bigger # than the old one if num_exp < chip_config["old_num_of_exp"]: for row in range(0, 4): del dg_channels_list[len(dg_channels_list) - 1] self.ssx_control_hwobj.set_dg_channels_list(dg_channels_list) # update old number of exposures self.ssx_control_hwobj.set_config_item("old_num_of_exp", num_exp)
def __init__(self, parent=None): QtImport.QWidget.__init__(self, parent) self.view_box = CustomViewBox() self.plot_widget = pg.PlotWidget(viewBox=self.view_box) self.image_view = pg.ImageView() self.image_view.ui.histogram.hide() self.image_view.ui.roiBtn.hide() self.image_view.ui.menuBtn.hide() self.plot_widget.showGrid(x=True, y=True) self.curves_dict = {} self.vlayout = QtImport.QVBoxLayout(self) self.vlayout.addWidget(self.plot_widget) self.vlayout.addWidget(self.image_view) # self.curve.setPen((200,200,100)) self.setFixedSize(600, 300) colors = [(0, 0, 0), (255, 0, 0), (255, 255, 0), (255, 255, 255)] cmap = pg.ColorMap(pos=np.linspace(0.0, 1.0, 4), color=colors) self.image_view.setColorMap(cmap) self.plot_widget.scene().sigMouseMoved.connect( self.plot_widget_mouse_moved) self.image_view.scene.sigMouseMoved.connect( self.image_view_mouse_moved)
def change_color_clicked(self): """Opens color dialog to choose color""" new_color = QtImport.QColorDialog.getColor( self.qtcolor or QtImport.QColor("white"), None, "Select a color") if new_color.isValid(): self.set_color(new_color)
def __init__(self, parent=None, name=None, fl=0): CreateTaskBase.__init__(self, parent, name, QtImport.Qt.WindowFlags(fl), "Standard") if not name: self.setObjectName("create_discrete_widget") # Internal variables -------------------------------------------------- self.init_models() # Graphic elements ---------------------------------------------------- self._acq_widget = AcquisitionWidget( self, "acquisition_widget", layout="vertical", acq_params=self._acquisition_parameters, path_template=self._path_template, ) self._data_path_widget = DataPathWidget( self, "create_dc_path_widget", data_model=self._path_template, layout="vertical", ) self._processing_widget = ProcessingWidget( self, data_model=self._processing_parameters) self._comments_widget = CommentsWidget(self) self._comments_widget.setHidden(True) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self._acq_widget) _main_vlayout.addWidget(self._data_path_widget) _main_vlayout.addWidget(self._processing_widget) _main_vlayout.addWidget(self._comments_widget) _main_vlayout.addStretch(0) _main_vlayout.setSpacing(6) _main_vlayout.setContentsMargins(2, 2, 2, 2) # SizePolicies -------------------------------------------------------- self._comments_widget.setFixedHeight(100) # Qt signal/slot connections ------------------------------------------ self._acq_widget.acqParametersChangedSignal.connect( self.acq_parameters_changed) self._data_path_widget.pathTemplateChangedSignal.connect( self.path_template_changed) self._acq_widget.madEnergySelectedSignal.connect( self.mad_energy_selected) self._processing_widget.enableProcessingSignal.connect( self._run_processing_toggled) # Other --------------------------------------------------------------- self._processing_widget.processing_widget.run_processing_parallel_cbox.\ setChecked(HWR.beamline.run_processing_parallel)
def __init__(self, parent=None): QtImport.QWidget.__init__(self, parent) self.im = None self.mpl_canvas = MplCanvas(self) self.colorbar = None # self.ntb = NavigationToolbar(self.mpl_canvas, self) self.selection_xrange = None self.selection_span = None self.mouse_clicked = None _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.mpl_canvas) # _main_vlayout.addWidget(self.ntb) _main_vlayout.setSpacing(2) _main_vlayout.setContentsMargins(0, 0, 0, 0) self.setSizePolicy(QtImport.QSizePolicy.Expanding, QtImport.QSizePolicy.Expanding) # self.mpl_canvas.axes.grid(True) self.mpl_canvas.axes.grid(color="r") self.mpl_canvas.fig.canvas.mpl_connect("button_press_event", self.button_pressed) self.mpl_canvas.fig.canvas.mpl_connect("button_release_event", self.mouse_released) self.mpl_canvas.fig.canvas.mpl_connect("motion_notify_event", self.motion_notify_event)
def data_browse_button_clicked(self): file_dialog = QtImport.QFileDialog(self) try: base_image_dir = os.path.dirname( str(self.results_widget.data_path_ledit.text())) except: base_image_dir = os.environ["HOME"] selected_filename = str( file_dialog.getOpenFileName(self, "Select an image", base_image_dir)) self.results_widget.data_path_ledit.setText(selected_filename) ff_path = selected_filename[:selected_filename.rindex("/") + 1] + "ff_" + selected_filename[ selected_filename.rindex("/") + 1:] self.results_widget.ff_path_ledit.setText(ff_path) #TODO move this to hwobj config_path = selected_filename.replace("mnt/beegfs/P14", "data/ispyb/p14")[:-4] + "json" if os.path.exists(config_path): self.results_widget.config_path_ledit.setText(config_path)
def populateColumn(self, colNum, values, colours=None): """Fill values into column, extending if necessary""" if len(values) > self.rowCount(): self.setRowCount(len(values)) for rowNum, text in enumerate(values): wdg = QtImport.QLineEdit(self) wdg.setFont(QtImport.QFont("Courier")) wdg.setReadOnly(True) wdg.setText(ConvertUtils.text_type(text)) if colours: colour = colours[rowNum] if colour: Colors.set_widget_color(wdg, getattr(Colors, colour), QtImport.QPalette.Base) # wdg.setBackground(getattr(QtImport.QColor, colour)) self.setCellWidget(rowNum, colNum, wdg)
def __init__(self, parent=None): QtImport.QWidget.__init__(self, parent) self.setObjectName("advanced_results_widget") # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- # Graphic elements ---------------------------------------------------- self.hit_map_widget = HitMapWidget(self) # Layout -------------------------------------------------------------- _main_hlayout = QtImport.QHBoxLayout(self) _main_hlayout.addWidget(self.hit_map_widget) _main_hlayout.setSpacing(2) _main_hlayout.setContentsMargins(0, 0, 0, 0) _main_hlayout.addStretch(0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ # Other --------------------------------------------------------------- if HWR.beamline.online_processing is not None: HWR.beamline.online_processing.connect("processingStarted", self.processing_started) HWR.beamline.online_processing.connect( "processingResultsUpdate", self.update_processing_results) else: self.setEnabled(False)
def init_interface(self): """ Build up GUI """ tmp_dict = self.multipos_hwobj.get_positions() if tmp_dict: if not self.table_created: # create table items for first and only time self.ui_widgets_manager.beam_positions_table.setRowCount( len(tmp_dict)) for row in range(len(tmp_dict)): for col in range(3): tmp_item = QtImport.QTableWidgetItem() tmp_item.setFlags(tmp_item.flags() ^ QtImport.Qt.ItemIsEditable) self.ui_widgets_manager.beam_positions_table.setItem( row, col, tmp_item) self.table_created = True table = self.ui_widgets_manager.beam_positions_table for i, (position, position_dict) in enumerate(tmp_dict.items()): beam_pos_x = position_dict["beam_pos_x"] beam_pos_y = position_dict["beam_pos_y"] table.item(i, 0).setText(str(position)) table.item(i, 1).setText(str(beam_pos_x)) table.item(i, 2).setText(str(beam_pos_y))
def slot_status(self, state): """Act when status changes.""" state = state - 1 color = [ self.palette().window(), Colors.LIGHT_GREEN, Colors.YELLOW, Colors.LIGHT_RED, self.palette().window(), ] palette = QtImport.QPalette() palette.setColor(QtImport.QPalette.Window, color[state]) self.motor_name_label.setPalette(palette) self.position_label.setPalette(palette) self.motor_position_label.setPalette(palette) if state == 2: # start moving self.move_box.set_old_position(self.motor_hwobj.get_value()) elif state == 3: # moving self.step_forward.setEnabled(False) self.step_backward.setEnabled(False) self.move_box.set_is_moving(True) else: self.step_forward.setEnabled(True) self.step_backward.setEnabled(True) self.move_box.set_is_moving(False)
def __ledit_update_value(self, field_name, widget, new_value, type_fn, validator): if not self.bindings[field_name][3]: origin_value = new_value if type_fn == float and validator: pattern = "%." + str(validator.decimals()) + "f" new_value = pattern % float(new_value) # fix validation if PyQt4 and sipapi 1 is used if isinstance(new_value, string_types): if "QString" in globals(): new_value = QtImport.QString(new_value) self.__validated(field_name, validator, self.bindings[field_name][0], new_value) if isinstance(widget, QtImport.QLineEdit): if type_fn is float and validator: widget.setText("{:g}".format( round(float(origin_value), validator.decimals()))) try: setattr(self.__model, field_name, type_fn(origin_value)) except ValueError: if origin_value != "": raise else: dispatcher.send("model_update", self.__model, field_name, self)
def set_ispyb_down(self): msg_dialog = QtImport.QMessageBox( "Register user", "Couldn't contact " + "the ISPyB database server: you've been logged as the local user.\n" + "Your experiments' information will not be stored in ISPyB!", QtImport.QMessageBox.Warning, QtImport.QMessageBox.Ok, QtImport.QMessageBox.NoButton, QtImport.QMessageBox.NoButton, self, ) s = self.font().pointSize() f = msg_dialog.font() f.setPointSize(s) msg_dialog.setFont(f) msg_dialog.updateGeometry() msg_dialog.show() now = time.strftime("%Y-%m-%d %H:%M:S") prop_dict = {"code": "", "number": "", "title": "", "proposalId": ""} ses_dict = { "sessionId": "", "startDate": now, "endDate": now, "comments": "" } self.accept_login(prop_dict, ses_dict)
class IntSpinBox(QtImport.QSpinBox): """Standard integer (spinbox) widget""" CHANGED_COLOR = QtImport.QColor(255, 165, 0) def __init__(self, parent, options): QtImport.QSpinBox.__init__(self, parent) self.lineEdit().setAlignment(QtImport.Qt.AlignLeft) self.__name = options["variableName"] if "unit" in options: self.setSuffix(" " + options["unit"]) if "defaultValue" in options: val = int(options["defaultValue"]) self.setValue(val) if "upperBound" in options: self.setMaximum(int(options["upperBound"])) else: self.setMaximum(sys.maxsize) if "lowerBound" in options: self.setMinimum(int(options["lowerBound"])) if "tooltip" in options: self.setToolTip(options["tooltip"]) def set_value(self, value): self.setValue(int(value)) def get_value(self): val = int(self.value()) return ConvertUtils.text_type(val) def get_name(self): return self.__name
def __init__(self, parent, index, start_pos, end_pos, trans_dict): QtImport.QGraphicsItem.__init__(self) self.parent = parent self.rect = QtImport.QRectF(0, 0, 0, 0) self.index = index self.start_pos = start_pos self.end_pos = end_pos
def paint(self, painter, option, widget): pen = QtImport.QPen(QtImport.Qt.SolidLine) pen.setWidth(1) pen.setColor(QtImport.Qt.black) painter.setPen(pen) if self.__num_drops: for drop_index in range(self.__num_drops): pos_x = self.scene().width() / 2 pos_y = float(drop_index + 1) / (self.__num_drops + 1) * \ self.scene().height() painter.drawLine(pos_x - 4, pos_y - 4, pos_x + 4, pos_y + 4) painter.drawLine(pos_x + 4, pos_y - 4, pos_x - 4, pos_y + 4) pen.setColor(QtImport.Qt.blue) pen.setWidth(2) # painter.drawLine(pos_x - 2, pos_y - 2, # pos_x + 2, pos_y + 2) # painter.drawLine(pos_x - 2, pos_y + 2, # pos_x + 2, pos_y - 2) # pen.setColor(QtCore.Qt.blue) painter.setPen(pen) if self.__navigation_posx and self.__navigation_posy: painter.drawLine(self.__navigation_posx - 8, self.__navigation_posy, self.__navigation_posx + 8, self.__navigation_posy) painter.drawLine(self.__navigation_posx, self.__navigation_posy - 8, self.__navigation_posx, self.__navigation_posy + 8)
def __init__(self, parent=None, name=None, flags=0): QtImport.QDialog.__init__( self, parent, QtImport.Qt.WindowFlags(flags | QtImport.Qt.WindowStaysOnTopHint), ) if name is not None: self.setObjectName(name) # Internal variables -------------------------------------------------- self.checked_items = [] self.sample_items = [] # Graphic elements ---------------------------------------------------- self.conf_dialog_layout = QtImport.load_ui_file("confirmation_dialog_layout.ui") # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.conf_dialog_layout) _main_vlayout.setContentsMargins(0, 0, 0, 0) _main_vlayout.setSpacing(0) # Qt signal/slot connections ------------------------------------------ self.conf_dialog_layout.continue_button.clicked.connect( self.continue_button_click ) self.conf_dialog_layout.cancel_button.clicked.connect(self.cancel_button_click) # SizePolicies -------------------------------------------------------- self.setMinimumWidth(1200) # Other --------------------------------------------------------------- self.setWindowTitle("Confirm collection")
def __init__(self, *args): BaseWidget.__init__(self, *args) # Hardware objects ---------------------------------------------------- # Internal values ----------------------------------------------------- self.max_log_lines = -1 self.test_mode = False # Properties ---------------------------------------------------------- self.add_property("maxLogLines", "integer", -1) # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self._status_bar_widget = LogBarWidget(self) # Layout -------------------------------------------------------------- _main_hlayout = QtImport.QHBoxLayout(self) _main_hlayout.addWidget(self._status_bar_widget) _main_hlayout.setSpacing(0) _main_hlayout.setContentsMargins(2, 2, 2, 2) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ # Other --------------------------------------------------------------- GUILogHandler.GUILogHandler().register(self)
def set_url(self, url): #if QWEBVIEW_AVAILABLE: # self.home_url = url # self.navigation_bar.setEnabled(True) # self.go_to_home_page() #else: self.web_page_viewer.setSource(QtImport.QUrl(url))
def append_log_record(self, record): """Appends a new log line to the text edit """ if self.is_running() and record.name in ("user_level_log", "GUI"): msg = record.getMessage() level = record.getLevel() self._status_bar_widget.text_edit.setTextColor( LogBarBrick.COLORS[level]) self._status_bar_widget.text_edit.append( "[%s %s] %s" % (record.getDate(), record.getTime(), msg)) # if level == logging.WARNING or level == logging.ERROR: # self._status_bar_widget.toggle_background_color() text_document = self._status_bar_widget.text_edit.document() if (self.max_log_lines > -1 and text_document.blockCount() > self.max_log_lines): cursor = QtImport.QTextCursor(text_document.firstBlock()) cursor.select(QtImport.QTextCursor.BlockUnderCursor) cursor.removeSelectedText() cursor.deleteChar() if level == logging.ERROR: self._status_bar_widget.toggle_background_color() if self.test_mode: assert False, msg
def refuse_login(self, stat, message=None): if message is not None: if stat is False: icon = QtImport.QMessageBox.Critical elif stat is None: icon = QtImport.QMessageBox.Warning elif stat is True: icon = QtImport.QMessageBox.Information msg_dialog = QtImport.QMessageBox( "Register user", message, icon, QtImport.QMessageBox.Ok, QtImport.QMessageBox.NoButton, QtImport.QMessageBox.NoButton, self, ) s = self.font().pointSize() f = msg_dialog.font() f.setPointSize(s) msg_dialog.setFont(f) msg_dialog.updateGeometry() msg_dialog.show() self.setEnabled(True)
def __init__(self, *args): """Main init""" BaseWidget.__init__(self, *args) # Internal values ----------------------------------------------------- self.graphics_initialized = None self.value_label_list = [] # Properties (name, type, default value, comment)---------------------- self.add_property("maxPlotPoints", "integer", 100, comment="Maximal number of plot points") # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- # Layout -------------------------------------------------------------- self.main_vlayout = QtImport.QVBoxLayout(self) self.main_vlayout.setSpacing(1) self.main_vlayout.setContentsMargins(2, 2, 2, 2) # SizePolicies -------------------------------------------------------- # Other --------------------------------------------------------------- self.setToolTip("Main information about the beamline")
def shape_created(self, shape, shape_type): """ Adds information about shape in all shapes treewidget and depending on shape type also information to treewidget of all points/lines/grids """ info_str_list = ( str(self.manager_widget.shapes_treewidget.topLevelItemCount() + 1), shape.get_display_name(), str(True), str(True), str(shape.used_count), ) self.__shape_map[shape] = QtImport.QTreeWidgetItem( self.manager_widget.shapes_treewidget, info_str_list ) self.toggle_buttons_enabled() # info_str_list = QStringList() info_str_list = [] info_str_list.append(str(shape.index)) if shape_type == "Point": info_str_list.append(str(shape.get_start_position())) self.manager_widget.point_treewidget.clearSelection() point_treewidget_item = QtImport.QTreeWidgetItem( self.manager_widget.point_treewidget, info_str_list ) point_treewidget_item.setSelected(True) self.__point_map[shape] = point_treewidget_item elif shape_type == "Line": (start_index, end_index) = shape.get_points_index() info_str_list.append("Point %d" % start_index) info_str_list.append("Point %d" % end_index) self.manager_widget.line_treewidget.clearSelection() line_treewidget_item = QtImport.QTreeWidgetItem( self.manager_widget.line_treewidget, info_str_list ) line_treewidget_item.setSelected(True) self.__line_map[shape] = line_treewidget_item elif shape_type == "Grid": self.manager_widget.grid_treewidget.clearSelection() grid_treewidget_item = QtImport.QTreeWidgetItem( self.manager_widget.grid_treewidget, info_str_list ) grid_treewidget_item.setSelected(True) self.__grid_map[shape] = grid_treewidget_item
def __init__(self, *args): BaseWidget.__init__(self, *args) # Hardware objects ---------------------------------------------------- self.plate_manipulator_hwobj = None # Internal values ----------------------------------------------------- self.num_cols = None self.num_rows = None self.num_drops = None self.current_location = None self.plate_content = None self.xtal_map = None # Properties ---------------------------------------------------------- self.add_property("mnemonic", "string", "") self.add_property("icons", "string", "") # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self.plate_navigator_widget = PlateNavigatorWidget(self) self.crims_widget = QtImport.load_ui_file("plate_crims_widget_layout.ui") # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.plate_navigator_widget) _main_vlayout.addWidget(self.crims_widget) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) # Qt signal/slot connections ------------------------------------------ self.crims_widget.search_button.clicked.connect(self.search_button_clicked) self.crims_widget.move_button.clicked.connect(self.move_to_xtal_clicked) self.crims_widget.abort_button.clicked.connect(self.abort_clicked) self.crims_widget.xtal_treewidget.currentItemChanged.connect( self.xtal_treewidget_current_item_changed ) # Other --------------------------------------------------------------- self.xtal_image_graphicsscene = QtImport.QGraphicsScene(self) self.crims_widget.xtal_image_graphicsview.setScene( self.xtal_image_graphicsscene ) self.xtal_image_pixmap = QtImport.QPixmap() self.xtal_image_graphics_pixmap = QtImport.QGraphicsPixmapItem() self.xtal_image_graphicsscene.addItem(self.xtal_image_graphics_pixmap)
def __init__(self, *args): BaseWidget.__init__(self, *args) self.logger = logging.getLogger("GUI Alba Actuator") self.logger.info("__init__()") self.on_color = Colors.color_to_hexa(Colors.LIGHT_GREEN) self.off_color = Colors.color_to_hexa(Colors.LIGHT_GRAY) self.fault_color = Colors.color_to_hexa(Colors.LIGHT_RED) self.unknown_color = Colors.color_to_hexa( Colors.DARK_GRAY ) # Hardware objects ---------------------------------------------------- self.light_ho = None self.state = None self.level = None self.icons = None self.level_limits = [None, None] # Properties ---------------------------------------------------------- self.add_property("mnemonic", "string", "") self.add_property("icons", "string", "") # Graphic elements ---------------------------------------------------- self.widget = QtImport.load_ui_file("alba_lightcontrol.ui") QtImport.QHBoxLayout(self) self.layout().addWidget(self.widget) self.layout().setContentsMargins(0, 0, 0, 0) self.widget.layout().setContentsMargins(0, 0, 0, 0) self.widget.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.widget.button.clicked.connect(self.do_switch) self.widget.slider.valueChanged.connect(self.do_set_level) # SizePolicies -------------------------------------------------------- self.setSizePolicy( QtImport.QSizePolicy.Expanding, QtImport.QSizePolicy.MinimumExpanding ) # Defaults self.set_icons("BulbCheck,BulbDelete") # Other --------------------------------------------------------------- self.setToolTip("Control of light (set level and on/off switch.") self.update()
def __init__(self, parent=None, name="image_tracking_widget"): QtImport.QWidget.__init__(self, parent) self.setObjectName(name) # Internal values ----------------------------------------------------- self.image_path = None self.data_collection = None # Signals ------------------------------------------------------------ # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self.image_tracking_widget_layout = QtImport.load_ui_file( "image_tracking_widget_layout.ui" ) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.image_tracking_widget_layout) _main_vlayout.setSpacing(0) _main_vlayout.addStretch(10) _main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.image_tracking_widget_layout.view_current_button.clicked.connect( self.open_in_viewer_clicked ) self.image_tracking_widget_layout.view_previous_button.clicked.connect( self.previous_button_clicked ) self.image_tracking_widget_layout.view_next_button.clicked.connect( self.next_button_clicked ) self.image_tracking_widget_layout.image_num_spinbox.valueChanged.connect( self.image_num_changed ) self.setEnabled(False) if hasattr(api.beamline_setup, "image_tracking_hwobj"): self.image_tracking_hwobj = api.beamline_setup.image_tracking_hwobj else: self.image_tracking_hwobj = None
def __init__(self, *args): QtImport.QDialog.__init__(self, *args) layout = QtImport.QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) self.widget = QtImport.load_ui_file("catscommand_dialog.ui") layout.addWidget(self.widget) self.btSend = self.widget.buttonBox.addButton( "Send", QtImport.QDialogButtonBox.ApplyRole ) self.btSend.clicked.connect(self.send_command) self.widget.cbCommand.clear() self.widget.cbCommand.insertItems(0, self.cmds) self.widget.cbCommand.activated.connect(self.command_selected) self.widget.buttonBox.rejected.connect(self.rejected)
def __init__(self, parent=None, name=None, fl=0, xray_imaging_params=None): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Internal variables -------------------------------------------------- # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self._xray_imaging_parameters = xray_imaging_params self._xray_imaging_mib = DataModelInputBinder(self._xray_imaging_parameters) self._parameters_widget = QtImport.load_ui_file( "xray_imaging_parameters_widget_layout.ui" ) # Layout -------------------------------------------------------------- __main_vlayout = QtImport.QVBoxLayout(self) __main_vlayout.addWidget(self._parameters_widget) __main_vlayout.setSpacing(0) __main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self._parameters_widget.ff_pre_cbox.toggled.connect(self.ff_pre_toggled) self._parameters_widget.ff_post_cbox.toggled.connect(self.ff_post_toggled) self._parameters_widget.add_button.pressed.connect(self.add_distance_pressed) self._parameters_widget.remove_button.pressed.connect(self.remove_distance_pressed) # Other --------------------------------------------------------------- self.detector_distance_validator = QtImport.QIntValidator( 0, 99999, self._parameters_widget.detector_distance_ledit )
def __init__(self, *args): """ Descript. : """ BaseWidget.__init__(self, *args) self.logger = logging.getLogger("GUI Alba Actuator") self.logger.info("__init__()") # Hardware objects ---------------------------------------------------- self.actuator_hwo = None self.state = None # Properties ---------------------------------------------------------- self.add_property("mnemonic", "string", "") self.add_property("in_cmd_name", "string", "") self.add_property("out_cmd_name", "string", "") # Graphic elements ---------------------------------------------------- self.widget = QtImport.load_ui_file( "alba_actuator.ui") QtImport.QHBoxLayout(self) self.layout().addWidget(self.widget) self.layout().setContentsMargins(0, 0, 0, 0) self.widget.layout().setContentsMargins(0, 0, 0, 0) self.widget.cmdInButton.clicked.connect(self.do_cmd_in) self.widget.cmdOutButton.clicked.connect(self.do_cmd_out) # SizePolicies -------------------------------------------------------- self.setSizePolicy( QtImport.QSizePolicy.Expanding, QtImport.QSizePolicy.MinimumExpanding ) # Other --------------------------------------------------------------- self.setToolTip( "Main information about machine current, " + "machine status and top-up remaining time." )
def __init__( self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout="vertical", ): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Internal variables -------------------------------------------------- # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- if acq_params is None: self._acquisition_parameters = queue_model_objects.AcquisitionParameters() else: self._acquisition_parameters = acq_params if path_template is None: self._path_template = queue_model_objects.PathTemplate() else: self._path_template = path_template self._acquisition_mib = DataModelInputBinder(self._acquisition_parameters) self.acq_widget_layout = QtImport.load_ui_file( "acquisition_widget_vertical_still_layout.ui" ) # Layout -------------------------------------------------------------- __main_vlayout = QtImport.QVBoxLayout(self) __main_vlayout.addWidget(self.acq_widget_layout) __main_vlayout.setSpacing(0) __main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.acq_widget_layout.num_triggers_ledit.textChanged.connect( self.num_triggers_ledit_changed ) self.acq_widget_layout.num_images_per_trigger_ledit.textChanged.connect( self.num_images_per_trigger_ledit_changed ) self.acq_widget_layout.exp_time_ledit.textChanged.connect( self.exposure_time_ledit_changed ) self.acq_widget_layout.detector_roi_mode_combo.activated.connect( self.detector_roi_mode_changed ) self.acq_widget_layout.energy_ledit.textEdited.connect( self.energy_ledit_changed ) self.acq_widget_layout.transmission_ledit.textEdited.connect( self.transmission_ledit_changed ) self.acq_widget_layout.resolution_ledit.textEdited.connect( self.resolution_ledit_changed ) # Other --------------------------------------------------------------- self.value_changed_list = [] self.energy_validator = QtImport.QDoubleValidator( 4, 25, 4, self.acq_widget_layout.energy_ledit ) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit ) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit ) self.exp_time_validator = QtImport.QDoubleValidator( 0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit ) self.num_triggers_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_triggers_ledit ) self.num_images_per_trigger_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_per_trigger_ledit ) self.num_img_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_ledit ) self.acq_widget_layout.detector_roi_mode_label.setEnabled(False) self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)
def __init__(self, parent=None, name="char_parameter_widget"): QtImport.QWidget.__init__(self, parent) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._char = None self._char_params = queue_model_objects.CharacterisationParameters() self._char_params_mib = DataModelInputBinder(self._char_params) self._tree_view_item = None self.previous_energy = None self.add_dc_cb = None # Graphic elements ---------------------------------------------------- main_widget = QtImport.QWidget(self) rone_widget = QtImport.QWidget(main_widget) self.reference_img_widget = ReferenceImageWidget(rone_widget) self.acq_widget = self.reference_img_widget.acq_widget self.path_widget = self.reference_img_widget.path_widget self.position_widget = QtImport.load_ui_file("snapshot_widget_layout.ui") self.position_widget.setMinimumSize(450, 340) rtwo_widget = QtImport.QWidget(main_widget) self.char_type_widget = CharTypeWidget(rtwo_widget) self.routine_dc_widget = self.char_type_widget.routine_dc_page self.sad_widget = self.char_type_widget.sad_page self.rad_dmg_char_widget = self.char_type_widget.rad_damage_page self.opt_parameters_widget = OptimisationParametersWidgetLayout(self) rtree_widget = QtImport.QWidget(main_widget) self.rad_dmg_widget = QtImport.load_ui_file( "radiation_damage_model_widget_layout.ui" ) self.vertical_dimension_widget = QtImport.load_ui_file( "vertical_crystal_dimension_widget_layout.ui" ) # Layout -------------------------------------------------------------- rone_widget_layout = QtImport.QHBoxLayout(rone_widget) rone_widget_layout.addWidget(self.reference_img_widget) rone_widget_layout.addWidget(self.position_widget) # rone_widget_layout.addStretch(0) rone_widget_layout.setSpacing(2) rone_widget_layout.setContentsMargins(0, 0, 0, 0) rtwo_widget_layout = QtImport.QHBoxLayout(rtwo_widget) rtwo_widget_layout.addWidget(self.char_type_widget) rtwo_widget_layout.addWidget(self.opt_parameters_widget) rtwo_widget_layout.addStretch(0) rtwo_widget_layout.setSpacing(2) rtwo_widget_layout.setContentsMargins(0, 0, 0, 0) rtree_widget_layout = QtImport.QHBoxLayout(rtree_widget) rtree_widget_layout.addWidget(self.rad_dmg_widget) rtree_widget_layout.addWidget(self.vertical_dimension_widget) rtree_widget_layout.addStretch(10) rtree_widget_layout.setSpacing(2) rtree_widget_layout.setContentsMargins(0, 0, 0, 0) _main_widget_vlayout = QtImport.QVBoxLayout(main_widget) _main_widget_vlayout.addWidget(rone_widget) _main_widget_vlayout.addWidget(rtwo_widget) _main_widget_vlayout.addWidget(rtree_widget) _main_widget_vlayout.addStretch(10) _main_widget_vlayout.setSpacing(2) _main_widget_vlayout.setContentsMargins(0, 0, 0, 0) _main_hlayout = QtImport.QHBoxLayout(self) _main_hlayout.addWidget(main_widget) _main_hlayout.setSpacing(0) _main_hlayout.addStretch(0) _main_hlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies ------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.toggle_permitted_range( self.opt_parameters_widget.opt_param_widget.permitted_range_cbx.isChecked() ) self.opt_parameters_widget.opt_param_widget.permitted_range_cbx.toggled.connect( self.toggle_permitted_range ) # Other --------------------------------------------------------------- self._char_params_mib.bind_value_update( "min_dose", self.routine_dc_widget.dose_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "min_time", self.routine_dc_widget.time_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "use_min_dose", self.routine_dc_widget.min_dose_radio, bool, None ) self._char_params_mib.bind_value_update( "use_min_time", self.routine_dc_widget.min_time_radio, bool, None ) self._char_params_mib.bind_value_update( "account_rad_damage", self.routine_dc_widget.radiation_damage_cbx, bool, None, ) self._char_params_mib.bind_value_update( "auto_res", self.sad_widget.automatic_resolution_radio, bool, None ) self._char_params_mib.bind_value_update( "sad_res", self.sad_widget.sad_resolution_ledit, float, QtImport.QDoubleValidator(0.5, 20, 3, self), ) self._char_params_mib.bind_value_update( "opt_sad", self.sad_widget.optimised_sad_cbx, bool, None ) self._char_params_mib.bind_value_update( "determine_rad_params", self.rad_dmg_char_widget.rad_damage_cbx, bool, None ) self._char_params_mib.bind_value_update( "burn_osc_start", self.rad_dmg_char_widget.burn_osc_start_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "burn_osc_interval", self.rad_dmg_char_widget.burn_osc_interval_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "use_aimed_resolution", self.opt_parameters_widget.opt_param_widget.maximum_res_cbx, bool, None, ) self._char_params_mib.bind_value_update( "use_aimed_multiplicity", self.opt_parameters_widget.opt_param_widget.aimed_mult_cbx, bool, None, ) self._char_params_mib.bind_value_update( "aimed_resolution", self.opt_parameters_widget.opt_param_widget.maximum_res_ledit, float, QtImport.QDoubleValidator(0.01, 1000, 2, self), ) self._char_params_mib.bind_value_update( "aimed_multiplicity", self.opt_parameters_widget.opt_param_widget.aimed_mult_ledit, float, QtImport.QDoubleValidator(0.01, 1000, 2, self), ) self._char_params_mib.bind_value_update( "aimed_i_sigma", self.opt_parameters_widget.opt_param_widget.i_over_sigma_ledit, float, QtImport.QDoubleValidator(0.01, 1000, 2, self), ) self._char_params_mib.bind_value_update( "aimed_completness", self.opt_parameters_widget.opt_param_widget.aimed_comp_ledit, float, QtImport.QDoubleValidator(0.01, 1000, 2, self), ) self._char_params_mib.bind_value_update( "strategy_complexity", self.opt_parameters_widget.opt_param_widget.start_comp_cbox, int, None, ) self._char_params_mib.bind_value_update( "use_permitted_rotation", self.opt_parameters_widget.opt_param_widget.permitted_range_cbx, bool, None, ) self._char_params_mib.bind_value_update( "permitted_phi_start", self.opt_parameters_widget.opt_param_widget.phi_start_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "permitted_phi_end", self.opt_parameters_widget.opt_param_widget.phi_end_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "low_res_pass_strat", self.opt_parameters_widget.opt_param_widget.low_res_pass_cbx, bool, None, ) self._char_params_mib.bind_value_update( "rad_suscept", self.rad_dmg_widget.sensetivity_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "beta", self.rad_dmg_widget.beta_over_gray_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "gamma", self.rad_dmg_widget.gamma_over_gray_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "max_crystal_vdim", self.vertical_dimension_widget.max_vdim_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "min_crystal_vdim", self.vertical_dimension_widget.min_vdim_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "min_crystal_vphi", self.vertical_dimension_widget.min_vphi_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "max_crystal_vphi", self.vertical_dimension_widget.max_vphi_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) # self._char_params_mib.bind_value_update('space_group', # self.vertical_dimension_widget.space_group_ledit, # str, # None) self.vertical_dimension_widget.space_group_ledit.addItems( queue_model_enumerables.XTAL_SPACEGROUPS ) self.char_type_widget.charact_type_tbox.currentChanged.connect( self.update_char_type ) self.rad_dmg_char_widget.rad_damage_cbx.toggled.connect( self.enable_opt_parameters_widget ) self.opt_parameters_widget.opt_param_widget.maximum_res_cbx.toggled.connect( self.enable_maximum_res_ledit ) self.opt_parameters_widget.opt_param_widget.aimed_mult_cbx.toggled.connect( self.enable_aimed_mult_ledit ) self.path_widget.data_path_layout.prefix_ledit.textChanged.connect( self._prefix_ledit_change ) self.path_widget.data_path_layout.run_number_ledit.textChanged.connect( self._run_number_ledit_change ) self.vertical_dimension_widget.space_group_ledit.activated.connect( self._space_group_change )
def __init__( self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout="horizontal", ): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self.previous_energy = 0 # If the acq. widget is used with grids then total osc range is not # equal to num_images * osc_range, but num_images_per_line * osc_range # For grids the osc total range is updated when a grid is selected self.grid_mode = False # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- if acq_params is None: self._acquisition_parameters = queue_model_objects.AcquisitionParameters() else: self._acquisition_parameters = acq_params if path_template is None: self._path_template = queue_model_objects.PathTemplate() else: self._path_template = path_template self._acquisition_mib = DataModelInputBinder(self._acquisition_parameters) if layout == "horizontal": self.acq_widget_layout = QtImport.load_ui_file( "acquisition_widget_horizontal_layout.ui" ) self.use_osc_start(False) else: self.acq_widget_layout = QtImport.load_ui_file( "acquisition_widget_vertical_layout.ui" ) # Layout -------------------------------------------------------------- __main_vlayout = QtImport.QVBoxLayout(self) __main_vlayout.addWidget(self.acq_widget_layout) __main_vlayout.setSpacing(0) __main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.acq_widget_layout.osc_start_cbox.stateChanged.connect(self.fix_osc_start) self.acq_widget_layout.exp_time_ledit.textChanged.connect( self.exposure_time_ledit_changed ) self.acq_widget_layout.exp_time_total_ledit.textEdited.connect( self.exp_time_total_ledit_changed ) self.acq_widget_layout.first_image_ledit.textChanged.connect( self.first_image_ledit_change ) self.acq_widget_layout.num_images_ledit.textChanged.connect( self.num_images_ledit_change ) self.acq_widget_layout.detector_roi_mode_combo.activated.connect( self.detector_roi_mode_changed ) self.acq_widget_layout.energies_combo.activated.connect(self.energy_selected) self.acq_widget_layout.mad_cbox.toggled.connect(self.use_mad) self.acq_widget_layout.osc_start_ledit.textEdited.connect( self.osc_start_ledit_changed ) self.acq_widget_layout.osc_range_ledit.textEdited.connect( self.osc_range_per_frame_ledit_changed ) self.acq_widget_layout.osc_total_range_ledit.textEdited.connect( self.osc_total_range_ledit_changed ) self.acq_widget_layout.energy_ledit.textEdited.connect( self.energy_ledit_changed ) self.acq_widget_layout.transmission_ledit.textEdited.connect( self.transmission_ledit_changed ) self.acq_widget_layout.resolution_ledit.textEdited.connect( self.resolution_ledit_changed ) self.acq_widget_layout.kappa_ledit.textEdited.connect(self.kappa_ledit_changed) self.acq_widget_layout.kappa_phi_ledit.textEdited.connect( self.kappa_phi_ledit_changed ) if self.acq_widget_layout.findChild(QtImport.QLineEdit, "overlap_ledit"): self.acq_widget_layout.overlap_ledit.textChanged.connect( self.overlap_changed ) if self.acq_widget_layout.findChild(QtImport.QCheckBox, "max_osc_range_cbx"): self.acq_widget_layout.max_osc_range_cbx.toggled.connect( self.max_osc_range_toggled ) # Other --------------------------------------------------------------- self.value_changed_list = [] self.acq_widget_layout.energies_combo.setDisabled(True) self.acq_widget_layout.energies_combo.addItems( ["ip: -", "pk: -", "rm1: -", "rm2: -"] ) self.osc_start_validator = QtImport.QDoubleValidator( -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit ) self.osc_range_per_frame_validator = QtImport.QDoubleValidator( 0, 10000, 4, self.acq_widget_layout.osc_range_ledit ) self.osc_total_range_validator = QtImport.QDoubleValidator( 0, 10000, 4, self.acq_widget_layout.osc_total_range_ledit ) self.kappa_validator = QtImport.QDoubleValidator( -0.01, 360, 4, self.acq_widget_layout.kappa_ledit ) self.kappa_phi_validator = QtImport.QDoubleValidator( -360, 360, 4, self.acq_widget_layout.kappa_phi_ledit ) self.energy_validator = QtImport.QDoubleValidator( 4, 25, 4, self.acq_widget_layout.energy_ledit ) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit ) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit ) self.exp_time_validator = QtImport.QDoubleValidator( 0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit ) self.first_img_validator = QtImport.QIntValidator( 0, 99999, self.acq_widget_layout.first_image_ledit ) self.num_img_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_ledit ) self.acq_widget_layout.detector_roi_mode_label.setEnabled(False) self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)
def __init__( self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout="vertical", ): """ Loads ui file that defines the gui layout. Initiates QLineEdits by adding limits, precision Connects to qt signals to update acquisition parameters :param parent: :param name: :param fl: :param acq_params: :param path_template: :param layout: """ QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Internal variables -------------------------------------------------- self.value_changed_list = [] # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- if acq_params is None: self._acquisition_parameters = queue_model_objects.AcquisitionParameters() else: self._acquisition_parameters = acq_params if path_template is None: self._path_template = queue_model_objects.PathTemplate() else: self._path_template = path_template self._acquisition_mib = DataModelInputBinder(self._acquisition_parameters) self.acq_widget_layout = QtImport.load_ui_file( "acquisition_widget_vertical_still_layout.ui" ) # Layout -------------------------------------------------------------- __main_vlayout = QtImport.QVBoxLayout(self) __main_vlayout.addWidget(self.acq_widget_layout) __main_vlayout.setSpacing(0) __main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.acq_widget_layout.num_triggers_ledit.textChanged.connect( self.num_triggers_ledit_changed ) self.acq_widget_layout.num_images_per_trigger_ledit.textChanged.connect( self.num_images_per_trigger_ledit_changed ) self.acq_widget_layout.exp_time_ledit.textChanged.connect( self.exposure_time_ledit_changed ) self.acq_widget_layout.detector_roi_mode_combo.activated.connect( self.detector_roi_mode_changed ) self.acq_widget_layout.energy_ledit.textEdited.connect( self.energy_ledit_changed ) self.acq_widget_layout.transmission_ledit.textEdited.connect( self.transmission_ledit_changed ) self.acq_widget_layout.resolution_ledit.textEdited.connect( self.resolution_ledit_changed ) # Other --------------------------------------------------------------- self.energy_validator = QtImport.QDoubleValidator( 4, 25, 4, self.acq_widget_layout.energy_ledit ) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit ) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit ) self.exp_time_validator = QtImport.QDoubleValidator( 0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit ) self.num_triggers_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_triggers_ledit ) self.num_images_per_trigger_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_per_trigger_ledit ) self.num_img_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_ledit ) limits_dict = api.beamline_setup.get_acquisition_limit_values() if "exposure_time" in limits_dict: limits = tuple(map(float, limits_dict["exposure_time"].split(","))) (lower, upper) = limits self.exp_time_validator.setRange(lower, upper, 6) self._acquisition_mib.bind_value_update( "exp_time", self.acq_widget_layout.exp_time_ledit, float, self.exp_time_validator, ) self._acquisition_mib.bind_value_update( "num_triggers", self.acq_widget_layout.num_triggers_ledit, int, self.num_triggers_validator, ) self._acquisition_mib.bind_value_update( "num_images_per_trigger", self.acq_widget_layout.num_images_per_trigger_ledit, int, self.num_images_per_trigger_validator, ) if "number_of_images" in limits_dict: limits = tuple(map(float, limits_dict["number_of_images"].split(","))) (lower, upper) = limits self.num_img_validator.setRange(lower, upper) self._acquisition_mib.bind_value_update( "num_images", self.acq_widget_layout.num_images_ledit, int, self.num_img_validator, ) self._acquisition_mib.bind_value_update( "energy", self.acq_widget_layout.energy_ledit, float, self.energy_validator ) self.update_energy_limits( (self.energy_validator.bottom(), self.energy_validator.top()) ) self._acquisition_mib.bind_value_update( "transmission", self.acq_widget_layout.transmission_ledit, float, self.transmission_validator, ) self.update_transmission_limits( (self.transmission_validator.bottom(), self.transmission_validator.top()) ) self._acquisition_mib.bind_value_update( "resolution", self.acq_widget_layout.resolution_ledit, float, self.resolution_validator, ) self.init_detector_roi_modes() self.acq_widget_layout.detector_roi_mode_label.setEnabled(False) self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)
def __init__(self, *args): BaseWidget.__init__(self, *args) # Internal variables ------------------------------------------------ self.sample = queue_model_objects.Sample() self.crystal = self.sample.crystals[0] self.sample_mib = DataModelInputBinder(self.sample) self.crystal_mib = DataModelInputBinder(self.crystal) # Signals ------------------------------------------------------------ # Slots -------------------------------------------------------------- self.define_slot("populate_sample_details", ({})) # Graphic elements ---------------------------------------------------- _info_widget = QtImport.QWidget(self) self.crystal_widget = QtImport.load_ui_file("crystal_widget_layout.ui") self.sample_info_widget = QtImport.load_ui_file("sample_info_widget_layout.ui") # self.ispyb_sample_info_widget = ISPyBSampleInfoWidget(self) # Layout -------------------------------------------------------------- _info_widget_hlayout = QtImport.QHBoxLayout(_info_widget) _info_widget_hlayout.addWidget(self.sample_info_widget) _info_widget_hlayout.addWidget(self.crystal_widget) _info_widget_hlayout.addStretch(0) _info_widget_hlayout.setSpacing(0) _info_widget_hlayout.setContentsMargins(2, 2, 2, 2) _main_hlayout = QtImport.QVBoxLayout(self) _main_hlayout.addWidget(_info_widget) # _main_hlayout.addWidget(self.ispyb_sample_info_widget) _main_hlayout.addStretch(0) _main_hlayout.setSpacing(0) _main_hlayout.setContentsMargins(2, 2, 2, 2) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ # Other --------------------------------------------------------------- self.crystal_mib.bind_value_update( "space_group", self.crystal_widget.space_group_value_label, str, None ) self.crystal_mib.bind_value_update( "protein_acronym", self.crystal_widget.protein_acronym_value_label, str, None, ) self.crystal_mib.bind_value_update( "cell_a", self.crystal_widget.a_value_label, str, None ) self.crystal_mib.bind_value_update( "cell_alpha", self.crystal_widget.alpha_value_label, str, None ) self.crystal_mib.bind_value_update( "cell_b", self.crystal_widget.b_value_label, str, None ) self.crystal_mib.bind_value_update( "cell_beta", self.crystal_widget.beta_value_label, str, None ) self.crystal_mib.bind_value_update( "cell_c", self.crystal_widget.c_value_label, str, None ) self.crystal_mib.bind_value_update( "cell_gamma", self.crystal_widget.gamma_value_label, str, None ) self.sample_mib.bind_value_update( "name", self.sample_info_widget.name_value_label, str, None ) self.sample_mib.bind_value_update( "code", self.sample_info_widget.data_matrix_value_label, str, None ) self.sample_mib.bind_value_update( "holder_length", self.sample_info_widget.holder_length_value_label, str, None, ) self.sample_mib.bind_value_update( "lims_sample_location", self.sample_info_widget.sample_location_value_label, str, None, ) self.sample_mib.bind_value_update( "lims_container_location", self.sample_info_widget.basket_location_value_label, str, None, )
def __init__(self, parent=None, name=None, fl=0): CreateTaskBase.__init__( self, parent, name, QtImport.Qt.WindowFlags(fl), "Advanced" ) if not name: self.setObjectName("create_advanced_widget") # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._advanced_methods = None self._grid_map = {} self.spacing = [0, 0] self.dc_selected = False self.init_models() # Graphic elements ---------------------------------------------------- self._advanced_methods_widget = QtImport.load_ui_file( "advanced_methods_layout.ui" ) self._acq_widget = AcquisitionWidget( self, "acquisition_widget", layout="vertical", acq_params=self._acquisition_parameters, path_template=self._path_template, ) self._acq_widget.grid_mode = True self._data_path_widget = DataPathWidget( self, "create_dc_path_widget", data_model=self._path_template, layout="vertical", ) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self._advanced_methods_widget) _main_vlayout.addWidget(self._acq_widget) _main_vlayout.addWidget(self._data_path_widget) _main_vlayout.addStretch(0) _main_vlayout.setSpacing(6) _main_vlayout.setContentsMargins(2, 2, 2, 2) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self._acq_widget.acqParametersChangedSignal.connect(self.acq_parameters_changed) self._acq_widget.madEnergySelectedSignal.connect(self.mad_energy_selected) self._acq_widget.acq_widget_layout.osc_range_ledit.textEdited.connect( self.grid_osc_range_ledit_changed ) self._acq_widget.acq_widget_layout.osc_total_range_ledit.textEdited.connect( self.grid_osc_total_range_ledit_changed ) self._data_path_widget.pathTemplateChangedSignal.connect( self.path_template_changed ) self._advanced_methods_widget.grid_treewidget.itemSelectionChanged.connect( self.grid_treewidget_item_selection_changed ) self._advanced_methods_widget.draw_grid_button.clicked.connect( self.draw_grid_button_clicked ) self._advanced_methods_widget.remove_grid_button.clicked.connect( self.remove_grid_button_clicked ) self._advanced_methods_widget.hor_spacing_ledit.textEdited.connect( self.hor_spacing_changed ) self._advanced_methods_widget.ver_spacing_ledit.textEdited.connect( self.ver_spacing_changed ) self._advanced_methods_widget.move_right_button.clicked.connect( lambda: self.move_grid("right") ) self._advanced_methods_widget.move_left_button.clicked.connect( lambda: self.move_grid("left") ) self._advanced_methods_widget.move_up_button.clicked.connect( lambda: self.move_grid("up") ) self._advanced_methods_widget.move_down_button.clicked.connect( lambda: self.move_grid("down") ) self._advanced_methods_widget.overlay_cbox.toggled.connect(self.overlay_toggled) self._advanced_methods_widget.overlay_slider.valueChanged.connect( self.overlay_alpha_changed ) self._advanced_methods_widget.overlay_color_button.clicked.connect( self.overlay_change_color ) self._advanced_methods_widget.move_to_grid_button.clicked.connect( self.move_to_grid ) # Other --------------------------------------------------------------- self._acq_widget.use_osc_start(False) self._acq_widget.use_kappa(False) self._acq_widget.acq_widget_layout.num_images_label.setEnabled(False) self._acq_widget.acq_widget_layout.num_images_ledit.setEnabled(False) for col in range(self._advanced_methods_widget.grid_treewidget.columnCount()): self._advanced_methods_widget.grid_treewidget.resizeColumnToContents(col) self._acq_widget.acq_widget_layout.osc_total_range_label.setText( "Total osc. range per line" ) self._advanced_methods = ( api.beamline_setup.get_advanced_methods() ) if self._advanced_methods: for method in self._advanced_methods: self._advanced_methods_widget.method_combo.addItem(method) else: self.setEnabled(False)
def __init__(self, *args): BaseWidget.__init__(self, *args) # Hardware objects ---------------------------------------------------- self.beamline_test_hwobj = None self.unittest_hwobj = None # Internal variables -------------------------------------------------- self.available_tests = None self.com_device_list = None # Properties ---------------------------------------------------------- self.add_property("mnemonic", "string", "") self.add_property("hwobj_unittest", "string", "") # Signals ------------------------------------------------------------ # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self.beamline_test_widget = QtImport.load_ui_file( "beamline_test_widget_layout.ui" ) self.test_toolbox = self.beamline_test_widget.test_toolbox self.test_queue_page = self.beamline_test_widget.queue_toolbox_page self.test_com_page = self.beamline_test_widget.com_toolbox_page self.test_focus_page = self.beamline_test_widget.focus_toolbox_page self.test_ppu_page = self.beamline_test_widget.ppu_toolbox_page self.com_device_table = self.beamline_test_widget.comm_device_table # self.current_test_listwidget = self.beamline_test_widget.current_test_listbox self.available_tests_listwidget = ( self.beamline_test_widget.available_tests_listwidget ) _web_view_widget = QtImport.QWidget(self) _load_last_test_button = QtImport.QPushButton( "View last results", _web_view_widget ) self.test_result_browser = WebViewWidget(_web_view_widget) # Layout -------------------------------------------------------------- _web_view_widget_vlayout = QtImport.QVBoxLayout(_web_view_widget) _web_view_widget_vlayout.addWidget(_load_last_test_button) _web_view_widget_vlayout.addWidget(self.test_result_browser) _web_view_widget_vlayout.setSpacing(2) _web_view_widget_vlayout.setContentsMargins(0, 0, 0, 0) _main_vlayout = QtImport.QHBoxLayout(self) _main_vlayout.addWidget(self.beamline_test_widget) _main_vlayout.addWidget(_web_view_widget) _main_vlayout.setSpacing(2) _main_vlayout.setContentsMargins(2, 2, 2, 2) # Qt signal/slot connections ------------------------------------------ self.beamline_test_widget.execute_all_button.clicked.connect( self.execute_all_tests_clicked ) self.beamline_test_widget.test_button.clicked.connect(self.execute_test_clicked) self.beamline_test_widget.focus_modes_combo.activated.connect( self.set_focus_mode_pressed ) self.available_tests_listwidget.itemDoubleClicked.connect( self.available_tests_double_clicked ) _load_last_test_button.clicked.connect(self.load_latest_test_results) self.beamline_test_widget.ppu_restart_button.clicked.connect(self.restart_ppu) # Other --------------------------------------------------------------- # self.beamline_test_widget.setFixedWidth(600) self.test_result_browser.setSizePolicy( QtImport.QSizePolicy.Expanding, QtImport.QSizePolicy.Expanding ) _load_last_test_button.setFixedWidth(200) self.test_toolbox.setCurrentWidget(self.test_queue_page) self.beamline_test_widget.setFixedWidth(700) self.test_result_browser.navigation_bar.setHidden(True)
def __init__(self, parent=None, name=None, fl=0): CreateTaskBase.__init__(self, parent, name, fl, "Characterisation") self.setObjectName("create_char_widget") # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._vertical_dimension_widget = None self._current_selected_item = None self._char = None self._char_params = None self.init_models() self._char_params_mib = DataModelInputBinder(self._char_params) # Graphic elements ---------------------------------------------------- self._acq_widget = AcquisitionWidgetSimple( self, acq_params=self._acquisition_parameters, path_template=self._path_template, ) self._data_path_widget = DataPathWidget( self, data_model=self._path_template, layout="vertical" ) self._vertical_dimension_widget = QtImport.load_ui_file( "vertical_crystal_dimension_widget_layout.ui" ) self._char_widget = QtImport.load_ui_file( "characterise_simple_widget_vertical_layout.ui" ) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self._acq_widget) _main_vlayout.addWidget(self._data_path_widget) _main_vlayout.addWidget(self._char_widget) _main_vlayout.addWidget(self._vertical_dimension_widget) _main_vlayout.setContentsMargins(2, 2, 2, 2) _main_vlayout.setSpacing(6) _main_vlayout.addStretch(0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self._data_path_widget.pathTemplateChangedSignal.connect( self.path_template_changed ) self._acq_widget.acqParametersChangedSignal.connect(self.acq_parameters_changed) self._vertical_dimension_widget.space_group_ledit.activated.connect( self._space_group_change ) # self.connect(induced_burn_cbx, QtCore.SIGNAL("toggled(bool)"), # self.use_induced_burn) self._char_widget.characterisation_gbox.toggled.connect( self.characterisation_gbox_toggled ) self._char_widget.wait_result_cbx.toggled.connect(self.wait_results_cbx_toggled) self._char_widget.execute_plan_cbx.toggled.connect( self.run_diffraction_plan_cbx_toggled ) # Other --------------------------------------------------------------- self._char_params_mib.bind_value_update( "opt_sad", self._char_widget.optimised_sad_cbx, bool, None ) self._char_params_mib.bind_value_update( "account_rad_damage", self._char_widget.account_rad_dmg_cbx, bool, None ) # self._char_params_mib.bind_value_update('determine_rad_params', # induced_burn_cbx, # bool, None) self._char_params_mib.bind_value_update( "strategy_complexity", self._char_widget.start_comp_cbox, int, None ) self._char_params_mib.bind_value_update( "max_crystal_vdim", self._vertical_dimension_widget.max_vdim_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "min_crystal_vdim", self._vertical_dimension_widget.min_vdim_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "min_crystal_vphi", self._vertical_dimension_widget.min_vphi_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._char_params_mib.bind_value_update( "max_crystal_vphi", self._vertical_dimension_widget.max_vphi_ledit, float, QtImport.QDoubleValidator(0.0, 1000, 2, self), ) self._vertical_dimension_widget.space_group_ledit.addItems(XTAL_SPACEGROUPS) self._data_path_widget.data_path_layout.compression_cbox.setVisible(False)
def __init__(self, *args): BaseWidget.__init__(self, *args) # Internal values ----------------------------------------------------- self.__shape_map = {} self.__point_map = {} self.__line_map = {} self.__grid_map = {} self.__original_height = 300 # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------ # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self.main_groupbox = QtImport.QGroupBox("Graphics items", self) self.manager_widget = QtImport.load_ui_file( "graphics_manager_layout.ui" ) # Layout -------------------------------------------------------------- _groupbox_vlayout = QtImport.QVBoxLayout(self) _groupbox_vlayout.addWidget(self.manager_widget) _groupbox_vlayout.setSpacing(0) _groupbox_vlayout.setContentsMargins(0, 0, 0, 0) self.main_groupbox.setLayout(_groupbox_vlayout) _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.main_groupbox) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) self.setLayout(_main_vlayout) # Qt signal/slot connections ------------------------------------------ self.main_groupbox.toggled.connect(self.main_groupbox_toggled) self.manager_widget.change_color_button.clicked.connect( self.change_color_clicked ) self.manager_widget.display_all_button.clicked.connect( self.display_all_button_clicked ) self.manager_widget.hide_all_button.clicked.connect( self.hide_all_button_clicked ) self.manager_widget.clear_all_button.clicked.connect( self.clear_all_button_clicked ) self.manager_widget.create_point_start_button.clicked.connect( self.create_point_start_button_clicked ) self.manager_widget.create_point_accept_button.clicked.connect( self.create_point_accept_button_clicked ) self.manager_widget.create_line_button.clicked.connect( self.create_line_button_clicked ) self.manager_widget.draw_grid_button.clicked.connect( self.draw_grid_button_clicked ) # self.manager_widget.shapes_treewidget.currentItemChanged.connect(\ # self.shape_treewiget_current_item_changed) self.manager_widget.shapes_treewidget.itemClicked.connect( self.shape_treewiget_item_clicked ) self.manager_widget.shapes_treewidget.customContextMenuRequested.connect( self.show_shape_treewidget_popup ) self.manager_widget.hor_spacing_ledit.textChanged.connect( self.grid_spacing_changed ) self.manager_widget.ver_spacing_ledit.textChanged.connect( self.grid_spacing_changed ) self.manager_widget.move_left_button.clicked.connect( self.grid_move_left_clicked ) self.manager_widget.move_right_button.clicked.connect( self.grid_move_right_clicked ) self.manager_widget.move_up_button.clicked.connect(self.grid_move_up_clicked) self.manager_widget.move_down_button.clicked.connect( self.grid_move_down_clicked ) # SizePolicies -------------------------------------------------------- # Other --------------------------------------------------------------- # by default manager is closed self.main_groupbox.setCheckable(True) self.main_groupbox.setChecked(False) self.main_groupbox_toggled(False) self.main_groupbox.setToolTip("Click to open/close item manager") self.connect(api.graphics, "shapeCreated", self.shape_created) self.connect(api.graphics, "shapeDeleted", self.shape_deleted) self.connect(api.graphics, "shapeSelected", self.shape_selected) self.connect(api.graphics, "centringInProgress", self.centring_in_progress_changed)
def __init__(self, *args): BaseWidget.__init__(self, *args) self.add_property("mnemonic", "string", "") self.define_slot("setExpertMode", ()) self.expert_mode = False self.widget = QtImport.load_ui_file( "catsmaint_widget.ui" ) QtImport.QHBoxLayout(self) self.layout().addWidget(self.widget) self.widget.btPowerOn.clicked.connect(self.power_on) self.widget.btPowerOff.clicked.connect(self.power_off) self.widget.btLid1Open.clicked.connect(self.lid1_open) self.widget.btLid1Close.clicked.connect(self.lid1_close) self.widget.btLid2Open.clicked.connect(self.lid2_open) self.widget.btLid2Close.clicked.connect(self.lid2_close) self.widget.btLid3Open.clicked.connect(self.lid3_open) self.widget.btLid3Close.clicked.connect(self.lid3_close) self.widget.btRegulationOn.clicked.connect(self.regulation_set_on) self.widget.btOpenTool.clicked.connect(self.tool_open) self.widget.btCloseTool.clicked.connect(self.tool_close) self.widget.btToolCalib.clicked.connect(self.tool_calibrate) self.widget.btMagnetOn.clicked.connect(self.magnet_on) self.widget.btMagnetOff.clicked.connect(self.magnet_off) # self.widget.btSoak.clicked.connect(self.soak) self.widget.btBack.clicked.connect(self.back_traj) self.widget.btSafe.clicked.connect(self.safe_traj) self.widget.btDry.clicked.connect(self.dry) self.widget.btHome.clicked.connect(self.home) # self.widget.btRestart.clicked.connect(self.restart) self.widget.btResetPutGet.clicked.connect(self.reset_put_get) self.widget.btResetMotion.clicked.connect(self.reset_motion) self.widget.btMemClear.clicked.connect(self.clear_memory) self.widget.btClear.clicked.connect(self.clear_memory) self.widget.btMore.clicked.connect(self.command_prompt) self.widget.btAbort.clicked.connect(self.abort) # self.widget.btPanic.clicked.connect(self.panic) self.device = None self.state = None self.status = None self.path_running = None self.powered = None self.regulation_on = None self.lid1_state = False self.lid2_state = False self.lid3_state = False self.tool_state = False self.widget.lblMessage.setStyleSheet("background-color: white;") self.update_buttons()
def __init__(self, parent=None, name=None, fl=0, xray_imaging_params=None): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Internal variables -------------------------------------------------- # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- self._xray_imaging_parameters = xray_imaging_params self._xray_imaging_mib = DataModelInputBinder(self._xray_imaging_parameters) self._parameters_widget = QtImport.load_ui_file( "xray_imaging_parameters_widget_layout.ui" ) # Layout -------------------------------------------------------------- __main_vlayout = QtImport.QVBoxLayout(self) __main_vlayout.addWidget(self._parameters_widget) __main_vlayout.setSpacing(0) __main_vlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self._parameters_widget.ff_pre_cbox.toggled.connect(self.ff_pre_toggled) self._parameters_widget.ff_post_cbox.toggled.connect(self.ff_post_toggled) self._parameters_widget.add_button.pressed.connect(self.add_distance_pressed) self._parameters_widget.remove_button.pressed.connect(self.remove_distance_pressed) # Other --------------------------------------------------------------- self.detector_distance_validator = QtImport.QIntValidator( 0, 99999, self._parameters_widget.detector_distance_ledit ) self._xray_imaging_mib.bind_value_update( "camera_write_data", self._parameters_widget.store_data_cbox, bool, None ) self._xray_imaging_mib.bind_value_update( "ff_pre", self._parameters_widget.ff_pre_cbox, bool, None ) self._xray_imaging_mib.bind_value_update( "ff_post", self._parameters_widget.ff_post_cbox, bool, None ) self._xray_imaging_mib.bind_value_update( "ff_apply", self._parameters_widget.ff_apply_cbox, bool, None ) self._xray_imaging_mib.bind_value_update( "ff_ssim_enabled", self._parameters_widget.ff_ssim_cbox, bool, None ) self._xray_imaging_mib.bind_value_update( "ff_num_images", self._parameters_widget.ff_num_images_ledit, int, None ) self._xray_imaging_mib.bind_value_update( "sample_offset_a", self._parameters_widget.ff_offset_a_ledit, float, None, ) self._xray_imaging_mib.bind_value_update( "sample_offset_b", self._parameters_widget.ff_offset_b_ledit, float, None, ) self._xray_imaging_mib.bind_value_update( "sample_offset_c", self._parameters_widget.ff_offset_c_ledit, float, None, ) self._xray_imaging_mib.bind_value_update( "detector_distance", self._parameters_widget.detector_distance_ledit, int, self.detector_distance_validator, )
def __init__(self, parent=None, name=None, fl=0, data_model=None): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) if data_model is None: self._model = queue_model_objects.ProcessingParameters() else: self._model = data_model self._model_mib = DataModelInputBinder(self._model) self.processing_widget = QtImport.load_ui_file( "processing_widget_vertical_layout.ui" ) self.main_layout = QtImport.QVBoxLayout(self) self.main_layout.addWidget(self.processing_widget) self.main_layout.setSpacing(0) self.main_layout.setContentsMargins(0, 0, 0, 0) self.processing_widget.space_group_combo.addItems( queue_model_enumerables.XTAL_SPACEGROUPS ) self._model_mib.bind_value_update( "cell_a", self.processing_widget.a_ledit, float, None ) self._model_mib.bind_value_update( "cell_alpha", self.processing_widget.alpha_ledit, float, None ) self._model_mib.bind_value_update( "cell_b", self.processing_widget.b_ledit, float, None ) self._model_mib.bind_value_update( "cell_beta", self.processing_widget.beta_ledit, float, None ) self._model_mib.bind_value_update( "cell_c", self.processing_widget.c_ledit, float, None ) self._model_mib.bind_value_update( "cell_gamma", self.processing_widget.gamma_ledit, float, None ) self._model_mib.bind_value_update( "num_residues", self.processing_widget.num_residues_ledit, float, None ) self.processing_widget.space_group_combo.activated.connect( self._space_group_change ) self.processing_widget.run_processing_after_cbox.stateChanged.connect( self._run_processing_after_toggled ) self.processing_widget.run_processing_parallel_cbox.stateChanged.connect( self._run_processing_parallel_toggled )
def __init__(self, parent=None, name=None, fl=0): CreateTaskBase.__init__(self, parent, name, fl, "Helical") if not name: self.setObjectName("create_helical_widget") self.init_models() # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._lines_map = {} # Graphic elements ---------------------------------------------------- self._lines_widget = QtImport.load_ui_file("helical_line_widget_layout.ui") self._acq_widget = AcquisitionWidget( self, "acquisition_widget", layout="vertical", acq_params=self._acquisition_parameters, path_template=self._path_template, ) self._data_path_widget = DataPathWidget( self, "create_dc_path_widget", data_model=self._path_template, layout="vertical", ) self._processing_widget = ProcessingWidget( self, data_model=self._processing_parameters ) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self._lines_widget) _main_vlayout.addWidget(self._acq_widget) _main_vlayout.addWidget(self._data_path_widget) _main_vlayout.addWidget(self._processing_widget) _main_vlayout.addStretch(0) _main_vlayout.setSpacing(6) _main_vlayout.setContentsMargins(2, 2, 2, 2) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self._lines_widget.lines_treewidget.itemSelectionChanged.connect( self.lines_treewidget_selection_changed ) self._lines_widget.create_line_button.clicked.connect( self.create_line_button_clicked ) self._lines_widget.create_auto_line_button.clicked.connect( self.create_auto_line_button_clicked ) self._lines_widget.remove_line_button.clicked.connect( self.remove_line_button_clicked ) self._lines_widget.overlay_cbox.stateChanged.connect(self.overlay_toggled) self._lines_widget.overlay_slider.valueChanged.connect( self.overlay_alpha_changed ) self._lines_widget.swap_points_button.clicked.connect(self.swap_points_clicked) self._acq_widget.acqParametersChangedSignal.connect(self.acq_parameters_changed) self._acq_widget.madEnergySelectedSignal.connect(self.mad_energy_selected) self._data_path_widget.pathTemplateChangedSignal.connect( self.path_template_changed ) self._processing_widget.enableProcessingSignal.connect( self._run_processing_toggled ) # Other --------------------------------------------------------------- for col in range(self._lines_widget.lines_treewidget.columnCount()): self._lines_widget.lines_treewidget.resizeColumnToContents(col) # self._processing_widget.processing_widget.\ # run_processing_parallel_cbox.setChecked(False) self._processing_widget.processing_widget.run_processing_parallel_cbox.setChecked( api.beamline_setup._get_run_processing_parallel() ) self.enable_widgets(False)
def __init__( self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout=None, ): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Internal variables -------------------------------------------------- self.value_changed_list = [] # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- if acq_params is None: self._acquisition_parameters = queue_model_objects.AcquisitionParameters() else: self._acquisition_parameters = acq_params if path_template is None: self._path_template = queue_model_objects.PathTemplate() else: self._path_template = path_template self._acquisition_mib = DataModelInputBinder(self._acquisition_parameters) self.acq_widget_layout = QtImport.load_ui_file( "acquisition_widget_vertical_simple_layout.ui" ) # Layout -------------------------------------------------------------- main_layout = QtImport.QVBoxLayout(self) main_layout.addWidget(self.acq_widget_layout) main_layout.setSpacing(0) main_layout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.acq_widget_layout.osc_start_cbox.stateChanged.connect(self.use_osc_start) self.acq_widget_layout.num_images_cbox.activated.connect(self.update_num_images) self.acq_widget_layout.detector_roi_mode_combo.activated.connect( self.detector_roi_mode_changed ) # Other --------------------------------------------------------------- self.osc_start_validator = QtImport.QDoubleValidator( -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit ) self.osc_range_validator = QtImport.QDoubleValidator( -10000, 10000, 4, self.acq_widget_layout.osc_range_ledit ) self.kappa_validator = QtImport.QDoubleValidator( 0, 360, 4, self.acq_widget_layout.kappa_ledit ) self.kappa_phi_validator = QtImport.QDoubleValidator( 0, 360, 4, self.acq_widget_layout.kappa_phi_ledit ) self.energy_validator = QtImport.QDoubleValidator( 0, 25, 5, self.acq_widget_layout.energy_ledit ) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit ) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit ) self.exp_time_validator = QtImport.QDoubleValidator( 0, 10000, 6, self.acq_widget_layout.exp_time_ledit ) self.acq_widget_layout.num_images_cbox.setCurrentIndex(1) self.acq_widget_layout.detector_roi_mode_label.setEnabled(False) self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)
def __init__(self, parent=None, name=None, fl=0, xray_imaging_params=None): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- self.beamline_setup_hwobj = None self.xray_imaging_hwobj = None # Internal variables -------------------------------------------------- self.current_image_num = 0 self.total_image_num = 0 # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- results_gbox = QtImport.QGroupBox("Results", self) self.graphics_view_widget = QtImport.QWidget(results_gbox) self.results_widget = QtImport.load_ui_file( "xray_imaging_results_widget_layout.ui" ) tools_widget = QtImport.QGroupBox(self) button_widget = QtImport.QWidget(self) self.start_centering_button = QtImport.QPushButton( Icons.load_icon("VCRPlay2"), "3 Click", tools_widget ) self.start_n_centering_button = QtImport.QPushButton( Icons.load_icon("VCRPlay"), "n Click", tools_widget ) self.accept_centering_button = QtImport.QPushButton( Icons.load_icon("ThumbUp"), "Save", tools_widget ) self.histogram_plot = TwoDimenisonalPlotWidget(self) self.popup_menu = QtImport.QMenu(self) self.popup_menu.menuAction().setIconVisibleInMenu(True) self.popup_menu.addAction( Icons.load_icon("VCRPlay2"), "Start 3-click centering", self.start_centering_clicked, ) self.popup_menu.addAction( Icons.load_icon("VCRPlay"), "Start n-click centering", self.start_n_centering_clicked, ) self.popup_menu.addAction( Icons.load_icon("ThumbUp"), "Create centering point", self.accept_centering_clicked, ) self.popup_menu.addSeparator() self.measure_distance_action = self.popup_menu.addAction( Icons.load_icon("measure_distance"), "Distance and histogram", self.measure_distance_clicked, ) # Layout -------------------------------------------------------------- self._graphics_view_widget_vlayout = QtImport.QVBoxLayout( self.graphics_view_widget ) self._graphics_view_widget_vlayout.setSpacing(0) self._graphics_view_widget_vlayout.setContentsMargins(0, 0, 0, 0) __button_widget_hlayout = QtImport.QHBoxLayout(button_widget) __button_widget_hlayout.addWidget(self.start_centering_button) __button_widget_hlayout.addWidget(self.start_n_centering_button) __button_widget_hlayout.addWidget(self.accept_centering_button) __button_widget_hlayout.addStretch() __button_widget_hlayout.setSpacing(2) __button_widget_hlayout.setContentsMargins(2, 2, 2, 2) __tools_widget_vlayout = QtImport.QVBoxLayout(tools_widget) __tools_widget_vlayout.addWidget(button_widget) __tools_widget_vlayout.addWidget(self.results_widget) __tools_widget_vlayout.addWidget(self.histogram_plot) __tools_widget_vlayout.addStretch() __tools_widget_vlayout.setSpacing(2) __tools_widget_vlayout.setContentsMargins(2, 2, 2, 2) __main_hlayout = QtImport.QHBoxLayout(self) __main_hlayout.addWidget(self.graphics_view_widget) __main_hlayout.addWidget(tools_widget) __main_hlayout.setSpacing(0) __main_hlayout.setContentsMargins(0, 0, 0, 0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.results_widget.data_browse_button.clicked.connect( self.data_browse_button_clicked ) self.results_widget.ff_browse_button.clicked.connect( self.ff_browse_button_clicked ) self.results_widget.config_browse_button.clicked.connect( self.config_browse_button_clicked ) self.results_widget.load_button.clicked.connect( self.load_button_clicked ) self.results_widget.first_image_button.clicked.connect( self.first_image_button_clicked ) self.results_widget.prev_image_button.clicked.connect( self.prev_image_button_clicked ) self.results_widget.next_image_button.clicked.connect( self.next_image_button_clicked ) self.results_widget.last_image_button.clicked.connect( self.last_image_button_clicked ) self.results_widget.minus_quarter_button.clicked.connect( self.minus_quater_button_clicked ) self.results_widget.last_image_button.clicked.connect( self.last_image_button_clicked ) self.results_widget.plus_quarter_button.clicked.connect( self.plus_quater_button_clicked ) self.results_widget.image_dial.valueChanged.connect( self.dial_value_changed ) #self.results_widget.image_slider.valueChanged.connect( # self.slider_value_changed #) self.results_widget.image_spinbox.valueChanged.connect( self.spinbox_value_changed ) self.results_widget.play_button.clicked.connect(self.play_button_clicked) self.results_widget.stop_button.clicked.connect(self.stop_button_clicked) self.results_widget.repeat_cbox.stateChanged.connect(self.repeat_state_changed) self.results_widget.ff_apply_cbox.stateChanged.connect( self.ff_apply_state_changed ) self.start_centering_button.clicked.connect(self.start_centering_clicked) self.accept_centering_button.clicked.connect(self.accept_centering_clicked) # Other --------------------------------------------------------------- self.results_widget.first_image_button.setIcon(Icons.load_icon("VCRRewind")) self.results_widget.prev_image_button.setIcon(Icons.load_icon("VCRPlay4")) self.results_widget.next_image_button.setIcon(Icons.load_icon("VCRPlay2")) self.results_widget.last_image_button.setIcon( Icons.load_icon("VCRFastForward2") ) self.results_widget.play_button.setIcon(Icons.load_icon("VCRPlay")) self.results_widget.stop_button.setIcon(Icons.load_icon("Stop2")) self.start_centering_button.setFixedSize(70, 50) self.start_n_centering_button.setFixedSize(70, 50) self.accept_centering_button.setFixedSize(70, 50)
def __init__(self, parent=None, name="dc_group_widget"): QtImport.QWidget.__init__(self, parent) if name is not None: self.setObjectName(name) # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------ # Slots --------------------------------------------------------------- # Hardware objects ---------------------------------------------------- self._beamline_setup_hwobj = None # Internal variables -------------------------------------------------- self._data_collection = None self.add_dc_cb = None self._tree_view_item = None _subwedge_widget = QtImport.QGroupBox("Summary", self) self.polar_scater_widget = PolarScaterWidget() self.subwedge_table = QtImport.QTableWidget(_subwedge_widget) self.position_widget = QtImport.load_ui_file("snapshot_widget_layout.ui") # Layout -------------------------------------------------------------- _subwedge_widget_vlayout = QtImport.QVBoxLayout(_subwedge_widget) _subwedge_widget_vlayout.addWidget(self.polar_scater_widget) _subwedge_widget_vlayout.addWidget(self.subwedge_table) _subwedge_widget_vlayout.setContentsMargins(0, 4, 0, 0) _subwedge_widget_vlayout.setSpacing(6) _subwedge_widget_vlayout.addStretch(0) _main_hlayout = QtImport.QHBoxLayout(self) _main_hlayout.addWidget(_subwedge_widget) _main_hlayout.setContentsMargins(0, 0, 0, 0) _main_hlayout.setSpacing(2) _main_hlayout.addStretch(0) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ # Other --------------------------------------------------------------- # self.polar_scater_widget.setFixedSize(600, 600) font = self.subwedge_table.font() font.setPointSize(8) self.subwedge_table.setFont(font) self.subwedge_table.setEditTriggers(QtImport.QAbstractItemView.NoEditTriggers) self.subwedge_table.setColumnCount(7) self.subwedge_table.horizontalHeader().setStretchLastSection(False) horizontal_headers = [ "Osc start", "Osc range", "Images", "Exposure time", "Energy", "Transmission", "Resolution", ] for index, header in enumerate(horizontal_headers): self.subwedge_table.setHorizontalHeaderItem( index, QtImport.QTableWidgetItem(header) )
def __init__(self, parent=None, name="", fl=0, data_model=None, layout=None): QtImport.QWidget.__init__(self, parent, QtImport.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) self.parent = parent # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._base_image_dir = "" self._base_process_dir = "" self.path_conflict_state = False self.enable_macros = False if data_model is None: self._data_model = queue_model_objects.PathTemplate() else: self._data_model = data_model self._data_model_pm = DataModelInputBinder(self._data_model) # Graphic elements ---------------------------------------------------- if layout == "vertical": self.data_path_layout = QtImport.load_ui_file( "data_path_widget_vertical_layout.ui" ) else: self.data_path_layout = QtImport.load_ui_file( "data_path_widget_horizontal_layout.ui" ) # Layout -------------------------------------------------------------- _main_vlayout = QtImport.QVBoxLayout(self) _main_vlayout.addWidget(self.data_path_layout) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) # Qt signal/slot connections ------------------------------------------ self.data_path_layout.prefix_ledit.textChanged.connect( self._prefix_ledit_change ) self.data_path_layout.run_number_ledit.textChanged.connect( self._run_number_ledit_change ) self.data_path_layout.browse_button.clicked.connect(self._browse_clicked) self.data_path_layout.folder_ledit.textChanged.connect( self._folder_ledit_change ) self.data_path_layout.compression_cbox.clicked.connect( self._compression_toggled ) # Other --------------------------------------------------------------- self._data_model_pm.bind_value_update( "base_prefix", self.data_path_layout.prefix_ledit, str, None ) self._data_model_pm.bind_value_update( "run_number", self.data_path_layout.run_number_ledit, int, QtImport.QIntValidator(0, 1000, self), ) self._data_model_pm.bind_value_update( "compression", self.data_path_layout.compression_cbox, bool, None )