mirror of
https://github.com/CopterExpress/clever-show.git
synced 2026-05-26 23:19:33 +00:00
Merge fixes and improvements
This commit is contained in:
@@ -501,12 +501,14 @@ class CopterDataModel(QtCore.QAbstractTableModel):
|
||||
self.data_contents[row].states.checked = value
|
||||
elif role == Qt.EditRole: # For user/outer actions with data, place modifiers applied
|
||||
formatted_value = self.formatter.format_place(col, value)
|
||||
if formatted_value is not None: # todo use new := syntax
|
||||
self.data_contents[row][col] = formatted_value
|
||||
if formatted_value is None: # todo use new := syntax
|
||||
return False
|
||||
|
||||
if col == 0:
|
||||
self.data_contents[row].client.send_message("id", {"new_id": formatted_value})
|
||||
self.data_contents[row].client.remove()
|
||||
self.data_contents[row][col] = formatted_value
|
||||
|
||||
if col == 0:
|
||||
self.data_contents[row].client.send_message("id", {"new_id": formatted_value})
|
||||
self.data_contents[row].client.remove() # TODO change
|
||||
|
||||
elif role == ModelDataRole: # For inner setting\editing of data
|
||||
self.data_contents[row][col] = value
|
||||
|
||||
@@ -172,7 +172,7 @@ class Server(messaging.Singleton):
|
||||
|
||||
if not any([client_addr == addr[0] for client_addr in Client.clients.keys()]):
|
||||
client = Client(addr[0])
|
||||
client.buffer_size = self.BUFFER_SIZE
|
||||
client.buffer_size = self.config.server_buffer_size
|
||||
logging.info("New client")
|
||||
else:
|
||||
client = Client.clients[addr[0]]
|
||||
|
||||
@@ -2,7 +2,6 @@ import os
|
||||
import re
|
||||
import sys
|
||||
import glob
|
||||
import math
|
||||
import time
|
||||
import logging
|
||||
import asyncio
|
||||
@@ -30,7 +29,6 @@ from copter_table import CopterTableWidget
|
||||
from visual_land_dialog import VisualLandDialog
|
||||
|
||||
|
||||
|
||||
def multi_glob(*patterns):
|
||||
return itertools.chain.from_iterable(glob.iglob(pattern) for pattern in patterns)
|
||||
|
||||
@@ -100,21 +98,19 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.ui.start_button.clicked.connect(self.send_start_time_selected)
|
||||
self.ui.pause_button.clicked.connect(self.pause_resume_selected)
|
||||
|
||||
self.ui.emergency_button.clicked.connect(self.emergency)
|
||||
self.ui.disarm_button.clicked.connect(partial(self.send_to_selected, "disarm"))
|
||||
self.ui.disarm_all_button.clicked.connect(self.disarm_all)
|
||||
|
||||
self.ui.land_all_button.clicked.connect(partial(Client.broadcast, "land"))
|
||||
self.ui.land_selected_button.clicked.connect(partial(self.send_to_selected, "land"))
|
||||
self.ui.disarm_all_button.clicked.connect(partial(Client.broadcast, "disarm"))
|
||||
self.ui.disarm_selected_button.clicked.connect(partial(self.send_to_selected, "disarm"))
|
||||
self.ui.visual_land_button.clicked.connect(self.visual_land)
|
||||
self.ui.emergency_land_button.clicked.connect(partial(self.send_to_selected, "emergency_land"))
|
||||
self.ui.leds_button.clicked.connect(partial(self.send_to_selected, "led_test"))
|
||||
self.ui.takeoff_button.clicked.connect(self.takeoff_selected)
|
||||
self.ui.flip_button.clicked.connect(self.flip_selected)
|
||||
self.ui.land_button.clicked.connect(partial(self.send_to_selected, "land"))
|
||||
|
||||
self.ui.reboot_fcu.clicked.connect(partial(self.send_to_selected, "reboot_fcu"))
|
||||
self.ui.calibrate_gyro.clicked.connect(self.calibrate_gyro_selected)
|
||||
self.ui.calibrate_level.clicked.connect(self.calibrate_level_selected)
|
||||
|
||||
self.ui.action_remove_row.triggered.connect(self.remove_selected)
|
||||
|
||||
self.ui.action_send_animations.triggered.connect(self.send_animations)
|
||||
self.ui.action_send_calibrations.triggered.connect(self.send_calibrations)
|
||||
self.ui.action_send_configurations.triggered.connect(self.send_config)
|
||||
@@ -138,6 +134,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.ui.action_play_music.triggered.connect(self.play_music)
|
||||
self.ui.action_stop_music.triggered.connect(self.stop_music)
|
||||
|
||||
self.ui.action_select_all_rows.triggered.connect(self.model.select_all)
|
||||
|
||||
self.init_table()
|
||||
|
||||
# Set most safety-important buttons disabled
|
||||
@@ -146,20 +144,16 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.ui.flip_button.setEnabled(False)
|
||||
|
||||
def init_table(self):
|
||||
# remove standard table widget
|
||||
# Remove standard table widget
|
||||
self.ui.horizontalLayout.removeWidget(self.ui.tableView)
|
||||
self.ui.tableView.close()
|
||||
|
||||
# init our custom widget
|
||||
# Init our custom widget
|
||||
self.ui.copter_table = CopterTableWidget(self.model)
|
||||
self.ui.copter_table.setObjectName("copter_table")
|
||||
|
||||
# add to layout
|
||||
self.ui.horizontalLayout.addWidget(self.ui.copter_table, 0)
|
||||
# Insert to layout at right
|
||||
self.ui.horizontalLayout.insertWidget(0, self.ui.copter_table, 0)
|
||||
|
||||
def init_model(self):
|
||||
# self.model.on_id_changed = self.set_copter_id
|
||||
|
||||
# Connect model signals to UI
|
||||
self.model.selected_ready_signal.connect(self.ui.start_button.setEnabled)
|
||||
self.model.selected_takeoff_ready_signal.connect(self.ui.takeoff_button.setEnabled)
|
||||
@@ -167,18 +161,18 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
# Connect calibrating signal (testing)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.check_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.pause_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.stop_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.emergency_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.disarm_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.land_all_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.land_selected_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.disarm_selected_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.disarm_all_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.visual_land_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.emergency_land_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.leds_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.land_button.setDisabled)
|
||||
self.model.selected_calibrating_signal.connect(self.ui.reboot_fcu.setDisabled)
|
||||
|
||||
self.model.selected_calibration_ready_signal.connect(self.ui.calibrate_gyro.setEnabled)
|
||||
self.model.selected_calibration_ready_signal.connect(self.ui.calibrate_level.setEnabled)
|
||||
|
||||
self.ui.action_select_all_rows.triggered.connect(self.model.select_all)
|
||||
|
||||
def iterate_selected(self, f, *args, **kwargs):
|
||||
for copter in self.model.user_selected():
|
||||
yield f(copter, *args, **kwargs)
|
||||
@@ -211,9 +205,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
@pyqtSlot()
|
||||
def selfcheck_selected(self):
|
||||
for copter_data_row in self.model.user_selected():
|
||||
client = copter_data_row.client
|
||||
client.get_response("telemetry", self.update_table_data)
|
||||
for copter in self.model.user_selected():
|
||||
copter.client.get_response("telemetry", self.update_table_data)
|
||||
|
||||
@pyqtSlot(object, dict)
|
||||
def update_table_data(self, client, telems: dict):
|
||||
@@ -273,24 +266,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.send_to_selected("resume", {"time": server.time_now() + time_gap})
|
||||
self.ui.pause_button.setText('Pause')
|
||||
|
||||
@pyqtSlot()
|
||||
def land_selected(self):
|
||||
for copter in self.model.user_selected():
|
||||
copter.client.send_message("land")
|
||||
|
||||
@pyqtSlot()
|
||||
def land_all(self):
|
||||
Client.broadcast_message("land")
|
||||
|
||||
@pyqtSlot()
|
||||
def disarm_all(self):
|
||||
Client.broadcast_message("disarm")
|
||||
|
||||
@pyqtSlot()
|
||||
def test_leds_selected(self):
|
||||
for copter in self.model.user_selected():
|
||||
copter.client.send_message("led_test")
|
||||
|
||||
@pyqtSlot()
|
||||
@confirmation_required("This operation will takeoff copters immediately. Proceed?")
|
||||
def takeoff_selected(self):
|
||||
@@ -451,6 +426,11 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
@pyqtSlot()
|
||||
def send_config(self):
|
||||
mode, ok = QInputDialog.getItem(self, "Select config sending mode", "Mode:",
|
||||
("Modify", "Rewrite"), 0, False)
|
||||
if not ok or not mode:
|
||||
return
|
||||
|
||||
path = QFileDialog.getOpenFileName(self, "Select configuration file", filter="Configs (*.ini *.txt .cfg)")[0]
|
||||
if not path:
|
||||
return
|
||||
@@ -462,27 +442,13 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
copters = self.model.user_selected()
|
||||
for copter in copters:
|
||||
copter.client.send_message("config", {"config": data, })
|
||||
|
||||
# if path:
|
||||
# print("Selected file:", path)
|
||||
# sendable_config = configparser.ConfigParser() # TODO
|
||||
# sendable_config.read(path)
|
||||
# options = []
|
||||
# for section in sendable_config.sections():
|
||||
# for option in dict(sendable_config.items(section)):
|
||||
# value = sendable_config[section][option]
|
||||
# logging.debug("Got item from config: {} {} {}".format(section, option, value))
|
||||
# options.append(ConfigOption(section, option, value))
|
||||
#
|
||||
# for copter in self.model.user_selected():
|
||||
# copter.client.send_config_options(*options)
|
||||
copter.client.send_message("config", {"config": data, "mode": mode})
|
||||
|
||||
@pyqtSlot()
|
||||
def send_any_command(self):
|
||||
text, okPressed = QInputDialog.getText(self, "Enter command to send on copter",
|
||||
"Command:", QLineEdit.Normal, "")
|
||||
if okPressed and text:
|
||||
text, ok = QInputDialog.getText(self, "Enter command to send on copter",
|
||||
"Command:", QLineEdit.Normal, "")
|
||||
if ok and text:
|
||||
self.send_to_selected("execute", {"command": text})
|
||||
|
||||
@pyqtSlot()
|
||||
@@ -610,7 +576,6 @@ if __name__ == "__main__":
|
||||
server.start()
|
||||
|
||||
window.show()
|
||||
# window.send_directory_files("lol")
|
||||
splash.close()
|
||||
|
||||
loop.run_forever()
|
||||
|
||||
@@ -544,6 +544,6 @@ class NotifierSock(Singleton):
|
||||
self._sending_sock.close()
|
||||
self._receiving_sock.close()
|
||||
|
||||
except OSError as e:
|
||||
except (OSError, KeyError) as e:
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user