import logging from PyQt5 import QtWidgets, QtCore from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QTableView, QMessageBox from server import Client import copter_table_models as table class CopterTableWidget(QTableView): def __init__(self, model, data_model=table.StatedCopterData): QTableView.__init__(self) self.model = model self._data_model = data_model self.proxy_model = table.CopterProxyModel() self.signals = table.SignalManager(self.model) self.proxy_model.setSourceModel(self.model) self.proxy_model.setDynamicSortFilter(True) # Initiate table and table self.model self.setModel(self.proxy_model) # Adjust properties self.resizeColumnsToContents() self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.doubleClicked.connect(self.on_double_click) # Some fancy wrappers to simplify syntax def add_client(self, **kwargs): self.signals.add_client_signal.emit(self._data_model(**kwargs)) def remove_client_data(self, row_data): self.signals.remove_client_signal.emit(row_data) def update_data(self, row, col, data, role=table.ModelDataRole): self.signals.update_data_signal.emit(row, col, data, role) @pyqtSlot(QtCore.QModelIndex) def on_double_click(self, index): col = index.column() if col == 7: data = self.proxy_model.data(index, role=table.ModelDataRole) if data and data != "OK": self._show_info("Selfcheck info", data) def _show_info(self, title, data): dialog = QMessageBox() dialog.setIcon(QMessageBox.NoIcon) dialog.setStandardButtons(QMessageBox.Ok) dialog.setWindowTitle(title) dialog.setText("\n".join(data[:10])) dialog.setDetailedText("\n".join(data)) dialog.exec() # def _selfcheck_shortener(self, data): # TODO!!! # shortened = [] # for line in data: # if len(line) > 89: # pass # return shortened