def _add_img(self, source, name=None, header=None, view_min=None, view_max=None, alpha=255, colormap='gray'): """ Add image. """ # If model is NULL, then re-initialize it. if not self.model: self._init_label_config_center() self.model = VolumeListModel([], self._label_config_center) self.model.set_scale_factor(self.default_grid_scale_factor, 'grid') self.model.set_scale_factor(self.default_orth_scale_factor, 'orth') self.painter_status = PainterStatus(ViewSettings()) # Save previous opened directory (except `standard` directory) file_path = source if sys.platform == 'win32': temp_dir = os.path.dirname(unicode(file_path, 'gb2312')) if not os.stat(temp_dir) == os.stat(os.path.join(self.label_path, 'standard')): self._temp_dir = temp_dir else: temp_dir = os.path.dirname(file_path) if not os.path.samefile(temp_dir, os.path.join(self.label_path, 'standard')): self._temp_dir = temp_dir if self.model.addItem(file_path, None, name, header, view_min, view_max, alpha, colormap): # Take different acions in different case. # If only one data in VolumeList, then initialize views. if self.model.rowCount() == 1: # initialize views self.list_view = LayerView(self._label_config_center) self.list_view.setModel(self.model) self._init_roi_dialog() self.image_view = GridView(self.model, self.painter_status) # initialize display layout central_widget = QWidget() layout = QHBoxLayout() central_widget.setLayout(layout) central_widget.layout().addWidget(self.list_view) central_widget.layout().addWidget(self.image_view) self.setCentralWidget(central_widget) # add a toolbar self._add_toolbar() #self.setUnifiedTitleAndToolBarOnMac(True) # change button status self._actions['save_image'].setEnabled(True) #self._actions['ld_lbl'].setEnabled(True) #self._actions['ld_glbl'].setEnabled(True) self._actions['new_image'].setEnabled(True) self._actions['close'].setEnabled(True) self._actions['orth_view'].setEnabled(True) self._actions['cross_hover_view'].setEnabled(True) self._actions['original_view'].setEnabled(True) self._actions['undo'].setEnabled(False) self._actions['redo'].setEnabled(False) self._functional_module_set_enabled(True) # connect signals with slots self.list_view.current_changed.connect(self._update_undo) self.list_view.current_changed.connect(self._update_redo) self.model.rowsInserted.connect(self._update_remove_image) self.model.undo_stack_changed.connect(self._update_undo) self.model.redo_stack_changed.connect(self._update_redo) # set current volume index self.list_view.setCurrentIndex(self.model.index(0)) # set crosshair as the center of the data self.model.set_cross_pos([self.model.getY()/2, self.model.getX()/2, self.model.getZ()/2]) ## Enable cursor tracking # self.list_view._list_view.selectionModel().currentChanged.connect( # self._switch_cursor_status) elif self.model.rowCount() > 1: self._actions['remove_image'].setEnabled(True) # set current volume index self.list_view.setCurrentIndex(self.model.index(0)) self.is_save_configure = True else: QMessageBox.information(self,'FreeROI', 'Cannot load ' + \ file_path + ': due to mismatch data size.')