Пример #1
0
 def test_qabstratitemview_item_delegate_for_index(self):
     view = QTableView()
     model = QStringListModel()
     model.setStringList(["AA", "BB"])
     view.setModel(model)
     idx1 = model.index(0, 0)
     idx2 = model.index(1, 0)
     delegate = QStyledItemDelegate()
     view.setItemDelegate(delegate)
     with warnings.catch_warnings(record=True):
         self.assertIs(view.itemDelegate(idx1), delegate)
         self.assertIs(view.itemDelegate(idx2), delegate)
Пример #2
0
 def _on_distribution_color_changed(self):
     for ti in range(self.tabs.count()):
         widget = self.tabs.widget(ti)
         model = widget.model()
         while isinstance(model, QAbstractProxyModel):
             model = model.sourceModel()
         data = model.source
         class_var = data.domain.class_var
         if self.color_by_class and class_var and class_var.is_discrete:
             color_schema = [QColor(*c) for c in class_var.colors]
         else:
             color_schema = None
         if self.show_distributions:
             delegate = gui.TableBarItem(self, color=self.dist_color,
                                         color_schema=color_schema)
         else:
             delegate = QStyledItemDelegate(self)
         widget.setItemDelegate(delegate)
     tab = self.tabs.currentWidget()
     if tab:
         tab.reset()
Пример #3
0
    def _setup_table_view(self, view, data):
        """Setup the `view` (QTableView) with `data` (Orange.data.Table)
        """
        if data is None:
            view.setModel(None)
            return

        datamodel = RichTableModel(data)

        rowcount = data.approx_len()

        if self.color_by_class and data.domain.has_discrete_class:
            color_schema = [
                QColor(*c) for c in data.domain.class_var.colors]
        else:
            color_schema = None
        if self.show_distributions:
            view.setItemDelegate(
                gui.TableBarItem(
                    self, color=self.dist_color, color_schema=color_schema)
            )
        else:
            view.setItemDelegate(QStyledItemDelegate(self))

        # Enable/disable view sorting based on data's type
        view.setSortingEnabled(is_sortable(data))
        header = view.horizontalHeader()
        header.setSectionsClickable(is_sortable(data))
        header.setSortIndicatorShown(is_sortable(data))

        view.setModel(datamodel)

        vheader = view.verticalHeader()
        option = view.viewOptions()
        size = view.style().sizeFromContents(
            QStyle.CT_ItemViewItem, option,
            QSize(20, 20), view)

        vheader.setDefaultSectionSize(size.height() + 2)
        vheader.setMinimumSectionSize(5)
        vheader.setSectionResizeMode(QHeaderView.Fixed)

        # Limit the number of rows displayed in the QTableView
        # (workaround for QTBUG-18490 / QTBUG-28631)
        maxrows = (2 ** 31 - 1) // (vheader.defaultSectionSize() + 2)
        if rowcount > maxrows:
            sliceproxy = TableSliceProxy(
                parent=view, rowSlice=slice(0, maxrows))
            sliceproxy.setSourceModel(datamodel)
            # First reset the view (without this the header view retains
            # it's state - at this point invalid/broken)
            view.setModel(None)
            view.setModel(sliceproxy)

        assert view.model().rowCount() <= maxrows
        assert vheader.sectionSize(0) > 1 or datamodel.rowCount() == 0

        # update the header (attribute names)
        self._update_variable_labels(view)

        selmodel = BlockSelectionModel(
            view.model(), parent=view, selectBlocks=not self.select_rows)
        view.setSelectionModel(selmodel)
        view.selectionFinished.connect(self.update_selection)