Disabling and enabling some buttons based on selected copters

This commit is contained in:
Artem30801
2019-06-16 19:06:51 +03:00
parent 0fa7d1a4b7
commit a9b9694add
2 changed files with 17 additions and 18 deletions

View File

@@ -26,7 +26,7 @@ class CopterData:
class CopterDataModel(QtCore.QAbstractTableModel):
checks = {}
#selected_available = QtCore.pyqtSignal(bool)
selected_ready_signal = QtCore.pyqtSignal(bool)
def __init__(self, parent=None):
super(CopterDataModel, self).__init__(parent)
@@ -45,8 +45,9 @@ class CopterDataModel(QtCore.QAbstractTableModel):
def user_selected(self):
return filter(lambda x: x.checked == Qt.Checked, self.data_contents)
def self_checked(self):
return filter(lambda x: all_checks(x), self.data_contents)
def selfchecked_ready(self, contents=()):
contents = contents or self.data_contents
return filter(lambda x: all_checks(x), contents)
def rowCount(self, n=None):
return len(self.data_contents)
@@ -92,6 +93,9 @@ class CopterDataModel(QtCore.QAbstractTableModel):
if role == Qt.CheckStateRole:
self.data_contents[index.row()].checked = value
# check if all selected are selfcheck and ok (ready)
self.selected_ready_signal.emit(set(self.user_selected()).issubset(self.selfchecked_ready()))
elif role == Qt.EditRole:
self.data_contents[index.row()][index.column()] = value
self.update_model(index)
@@ -191,17 +195,6 @@ class CopterProxyModel(QtCore.QSortFilterProxyModel):
return self.human_sort_prepare(leftData) < self.human_sort_prepare(rightData)
'''
def sort(self, col, order):
self.layoutAboutToBeChanged.emit()
self.data_contents = sorted(self.data_contents, key=lambda item: self.sorter(item[col]),
reverse=(order == Qt.DescendingOrder))
self.layoutChanged.emit()
'''
class SignalManager(QtCore.QObject):
update_data_signal = QtCore.pyqtSignal(int, int, QtCore.QVariant)
add_client_signal = QtCore.pyqtSignal(object)

View File

@@ -41,14 +41,19 @@ class MainWindow(QtWidgets.QMainWindow):
self.proxy_model.setDynamicSortFilter(True)
self.proxy_model.setSourceModel(self.model)
# Initing table and table self.model
# Initiate table and table self.model
self.ui.tableView.setModel(self.proxy_model)
self.ui.tableView.horizontalHeader().setStretchLastSection(True)
self.ui.tableView.setSortingEnabled(True)
# Connect signals to manipulate model from threads
self.signals.update_data_signal.connect(self.model.update_item)
self.signals.add_client_signal.connect(self.model.add_client)
# Connect model signals to UI
self.model.selected_ready_signal.connect(self.ui.start_button.setEnabled)
self.model.selected_ready_signal.connect(self.ui.takeoff_button.setEnabled)
def client_connected(self, client: Client):
self.signals.add_client_signal.emit(CopterData(copter_id=client.copter_id, client=client))
@@ -69,6 +74,10 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.action_send_configurations.triggered.connect(self.send_configurations)
self.ui.action_send_Aruco_map.triggered.connect(self.send_aruco)
# Set most safety-important buttons disabled
self.ui.start_button.setEnabled(False)
self.ui.takeoff_button.setEnabled(False)
@pyqtSlot()
def selfcheck_selected(self):
for copter_data in self.model.user_selected():
@@ -80,9 +89,6 @@ class MainWindow(QtWidgets.QMainWindow):
copter.get_response("selfcheck", self._set_copter_data, callback_args=(4, copter_data.copter_id))
copter.get_response("time", self._set_copter_data, callback_args=(5, copter_data.copter_id))
#self.ui.start_button.setEnabled(True)
#self.ui.takeoff_button.setEnabled(True)
def _set_copter_data(self, value, col, copter_id):
row = self.model.data_contents.index(next(
filter(lambda x: x.copter_id == copter_id, self.model.data_contents)))