class GenericSearchForm(QWidget, Ui_SearchForm): """ Common interface for search forms """ def __init__(self, model, parent=None): super(GenericSearchForm, self).__init__(parent) self.setupUi(self) self.viewSearch.setSortingEnabled(True) self._model = model self._proxy = CustomSortFilterProxyModel() self._proxy.setSourceModel(self._model) self._proxy.set_filter_columns([0]) self.viewSearch.setModel(self._proxy) self.initialLoad() self._record = None def initialLoad(self): self._model.modelReset.connect(self.setup_view) def setup_view(self): self.resize_columns() self.viewSearch.selectRow(0) def resize_columns(self): self.viewSearch.resizeColumnsToContents() self.viewSearch.horizontalHeader().setResizeMode(QHeaderView.Stretch) # for some reason developers made resizemode options all mutually exclusive, you can't # stretch columns to fill up the widget AND be able to resize them without this for col in range(self.viewSearch.horizontalHeader().count() - 1): self.viewSearch.horizontalHeader().setResizeMode(col, QHeaderView.Interactive) def refresh(self): self._model.load() def get_record_at(self, index): source_index = self._proxy.mapToSource(index) return self._model.get_record(source_index.row()) def get_current_index(self): return self.viewSearch.currentIndex() @QtCore.Slot() def on_btnRefresh_clicked(self): self.refresh() self.edKeyword.setFocus() @QtCore.Slot(str) def on_edKeyword_textChanged(self, text): search = QtCore.QRegExp(text, QtCore.Qt.CaseInsensitive, QtCore.QRegExp.RegExp) self._proxy.setFilterRegExp(search) def resizeEvent(self, event): self.resize_columns() super(GenericSearchForm, self).resizeEvent(event)
class PendenciesDock(QDockWidget, Ui_Dock): """ Interface for pendencies viewing """ def __init__(self, parent=None): super(PendenciesDock, self).__init__(parent) self.setupUi(self) self.tableView.setSortingEnabled(True) self._model = DefaulterTableModel() self._proxy = CustomSortFilterProxyModel() self._proxy.setSourceModel(self._model) self._proxy.set_filter_columns([1, 2, 3]) self.visibilityChanged.connect(self.toggle_visibility) self.tableView.setModel(self._proxy) # having problem moving sections, had to flag it self.__first_load = True self._model.modelReset.connect(self.setup_view) def refresh(self): self._model.load() def setup_view(self): self.tableView.setColumnHidden(self._model.ID, True) # Debt should be the first column # (I could do it on the model but I wouldn't be able to subclass and use the parent there) if self.__first_load: self.__first_load = False self.tableView.horizontalHeader().moveSection(8, 0) self.resize_columns() self.tableView.selectRow(0) def resize_columns(self): self.tableView.resizeColumnsToContents() self.tableView.horizontalHeader().setResizeMode(1, QHeaderView.Stretch) def toggle_visibility(self, visible): actionPendencies = self.parent().parent().actionPendencies if visible: self.refresh() actionPendencies.setEnabled(False) self.edKeyword.setFocus() else: actionPendencies.setEnabled(True) def closeEvent(self, event): self.toggle_visibility(False) grandparent = self.parent().parent() grandparent.remove_instance(self) @QtCore.Slot() def on_btnRefresh_clicked(self): self.refresh() @QtCore.Slot(str) def on_edKeyword_textChanged(self, text): search = QtCore.QRegExp(text, QtCore.Qt.CaseInsensitive, QtCore.QRegExp.RegExp) self._proxy.setFilterRegExp(search) @QtCore.Slot(QtCore.QModelIndex) def on_tableView_doubleClicked(self, index): source_index = self._proxy.mapToSource(index) record = self._model.get_record(source_index.row()) print record