class QtTableView(QtAbstractItemView, ProxyTableView): #: Proxy widget widget = Typed(QTableView) def create_widget(self): self.widget = QTableView(self.parent_widget()) def init_widget(self): super(QtTableView, self).init_widget() d = self.declaration self.set_show_grid(d.show_grid) def init_model(self): self.set_model(QAtomTableModel(parent=self.widget)) # ------------------------------------------------------------------------- # Widget settters # ------------------------------------------------------------------------- def set_show_grid(self,show): self.widget.setShowGrid(show) def set_cell_padding(self, padding): self.widget.setStyleSheet( "QTableView::item { padding: %ipx }" % padding) def set_vertical_minimum_section_size(self, size): self.widget.verticalHeader().setMinimumSectionSize(size) def set_horizontal_minimum_section_size(self, size): self.widget.horizontalHeader().setMinimumSectionSize(size) def set_horizontal_stretch(self, stretch): self.widget.horizontalHeader().setStretchLastSection(stretch) def set_vertical_stretch(self, stretch): self.widget.verticalHeader().setStretchLastSection(stretch) def set_resize_mode(self, mode): header = self.widget.horizontalHeader() if IS_QT4: header.setResizeMode(RESIZE_MODES[mode]) else: # Custom is obsolete, use fixed instead. mode = 'fixed' if mode == 'custom' else mode header.setSectionResizeMode(RESIZE_MODES[mode]) def set_show_horizontal_header(self, show): header = self.widget.horizontalHeader() header.show() if show else header.hide() def set_show_vertical_header(self, show): header = self.widget.verticalHeader() header.show() if show else header.hide() # ------------------------------------------------------------------------- # View refresh handlers # ------------------------------------------------------------------------- def _refresh_visible_column(self, value): self._pending_column_refreshes -= 1 if self._pending_column_refreshes == 0: d = self.declaration cols = self.model.columnCount()-d.visible_columns d.visible_column = max(0, min(value, cols)) def _refresh_visible_row(self, value): self._pending_row_refreshes -= 1 if self._pending_row_refreshes == 0 and (self.declaration is not None): d = self.declaration rows = self.model.rowCount()-d.visible_rows d.visible_row = max(0, min(value, rows)) def _refresh_visible_rows(self): return top = self.widget.rowAt(self.widget.rect().top()) bottom = self.widget.rowAt(self.widget.rect().bottom()) self.declaration.visible_rows = max(1, (bottom-top))*2 # 2x for safety def _refresh_visible_columns(self): return left = self.widget.rowAt(self.widget.rect().left()) right = self.widget.rowAt(self.widget.rect().right()) self.declaration.visible_columns = max(1, (right-left))*2