def update_control(self): """ Update the control area of the widget. Populate the list views with keys from attribute labels. """ keys = self.get_suitable_keys(self.data) model = PyListModel(keys) self.separate_view.setModel(model) self.connect( self.separate_view.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.on_separate_key_changed) model = PyListModel(keys) self.relevant_view.setModel(model) self.connect( self.relevant_view.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.on_relevant_key_changed) self.openContext("", keys) # Get the selected keys from the open context context = self.currentContexts[""] separate_keys = getattr(context, "separate_keys", set()) relevant_keys = getattr(context, "relevant_keys", set()) def select(model, selection_model, selected_items): all_items = list(model) try: indices = [all_items.index(item) for item in selected_items] except: indices = [] for ind in indices: selection_model.select(model.index(ind), QItemSelectionModel.Select) self._disable_updates = True try: select(self.relevant_view.model(), self.relevant_view.selectionModel(), relevant_keys) select(self.separate_view.model(), self.separate_view.selectionModel(), separate_keys) finally: self._disable_updates = False
def set_data(self, data=None): """ Set the input example table. """ self.closeContext() self.clear() self.data = data self.error(0) self.warning(0) if data and not self.get_suitable_keys(data): self.error(0, "Data has no suitable attribute labels.") data = None if data: self.info_box.setText("{0} genes\n{1} experiments".format( len(data), len(data.domain))) self.update_control() self.split_data() else: self.separate_view.setModel(PyListModel([])) self.relevant_view.setModel(PyListModel([])) self.groups_scroll_area.setWidget(QWidget()) self.info_box.setText("No data on input.\n") self.commit()
def __init__(self, parent=None, signalManager=None, title="Quality Control"): OWWidget.__init__(self, parent, signalManager, title, wantGraph=True) self.inputs = [("Experiment Data", Orange.data.Table, self.set_data)] ## Settings self.selected_distance_index = 0 ## Attributes self.data = None self.distances = None self.groups = None self.unique_pos = None self.base_group_index = 0 ## GUI box = OWGUI.widgetBox(self.controlArea, "Info") self.info_box = OWGUI.widgetLabel(box, "\n") ## Separate By box box = OWGUI.widgetBox(self.controlArea, "Separate By") self.split_by_model = PyListModel() self.split_by_view = QListView() self.split_by_view.setSelectionMode(QListView.ExtendedSelection) self.split_by_view.setModel(self.split_by_model) box.layout().addWidget(self.split_by_view) self.connect( self.split_by_view.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.on_split_key_changed) ## Sort By box box = OWGUI.widgetBox(self.controlArea, "Sort By") self.sort_by_model = PyListModel() self.sort_by_view = QListView() self.sort_by_view.setSelectionMode(QListView.ExtendedSelection) self.sort_by_view.setModel(self.sort_by_model) box.layout().addWidget(self.sort_by_view) self.connect( self.sort_by_view.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.on_sort_key_changed) ## Distance box box = OWGUI.widgetBox(self.controlArea, "Distance Measure") OWGUI.comboBox(box, self, "selected_distance_index", items=[t[0] for t in self.DISTANCE_FUNCTIONS], callback=self.on_distance_measure_changed) self.connect(self.graphButton, SIGNAL("clicked()"), self.save_graph) self.scene = QGraphicsScene() self.scene_view = QualityGraphicsView(self.scene) self.scene_view.setRenderHints(QPainter.Antialiasing) self.scene_view.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) self.mainArea.layout().addWidget(self.scene_view) self.connect(self.scene_view, SIGNAL("view_size_changed(QSize)"), self.on_view_resize) self._disable_updates = False self._cached_distances = {} self._base_index_hints = {} self.main_widget = None self.resize(800, 600)