mirror of
https://github.com/CopterExpress/clever-show.git
synced 2026-05-26 07:07:58 +00:00
Disabling and enabling some buttons based on selected copters
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)))
|
||||
|
||||
Reference in New Issue
Block a user