mirror of
https://github.com/CopterExpress/clever-show.git
synced 2026-06-08 13:04:31 +00:00
Revert "Merge branch 'qt-gui-update' of https://github.com/CopterExpress/clever-show into qt-gui-update"
This reverts commita6c4bd76f4, reversing changes made tod0eed91f73.
This commit is contained in:
@@ -24,7 +24,6 @@ remove_disconnected = boolean(default=False)
|
||||
start_position = boolean(default=True)
|
||||
last_task = boolean(default=True)
|
||||
time_delta = boolean(default=True)
|
||||
config_version = boolean(default=True)
|
||||
[[[__many__]]]
|
||||
__many__ = boolean
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@ class ConfigModel(QtCore.QAbstractItemModel):
|
||||
return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction
|
||||
|
||||
def mimeTypes(self):
|
||||
return ['app/configitem']
|
||||
return ['app/configitem', 'text/xml']
|
||||
|
||||
def mimeData(self, indexes):
|
||||
mimedata = QtCore.QMimeData()
|
||||
|
||||
@@ -49,10 +49,8 @@ class CopterTableWidget(QTableView):
|
||||
self.setSortingEnabled(True)
|
||||
self.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
|
||||
self.resizeColumnsToContents()
|
||||
self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectItems)
|
||||
self.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
|
||||
self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
self.doubleClicked.connect(self.on_double_click)
|
||||
self.setDragEnabled(True)
|
||||
|
||||
def moved(self, logical_index, old_index, new_index):
|
||||
name = self.current_columns.pop(old_index)
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import math
|
||||
import indexed
|
||||
from contextlib import suppress
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from PyQt5.QtCore import Qt as Qt, QUrl, QDir
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5.QtCore import Qt as Qt
|
||||
|
||||
|
||||
ModelDataRole = 998
|
||||
ModelStateRole = 999
|
||||
@@ -118,18 +116,15 @@ columns_names = {'copter_id': 'copter ID',
|
||||
'current_position': 'current x y z yaw frame_id',
|
||||
'start_position': ' start x y z ',
|
||||
'last_task': 'last task',
|
||||
'time_delta': 'dt',
|
||||
'config_version': 'configuration',
|
||||
'time_delta': 'dt'
|
||||
}
|
||||
|
||||
columns = list(columns_names.keys())
|
||||
|
||||
class CopterData:
|
||||
class_basic_attrs = indexed.IndexedOrderedDict([('copter_id', None), ('git_ver', None), ('animation_id', None),
|
||||
('battery', None), ('fcu_status', None), ('calibration_status', None),
|
||||
('battery', None), ('fcu_status', None), ('cal_status', None),
|
||||
('mode', None), ('selfcheck', None), ('current_position', None),
|
||||
('start_position', None), ('last_task', None), ('time_delta', None),
|
||||
("config_version", None), ('client', None)])
|
||||
('start_position', None), ('last_task', None), ('time_delta', None), ('client', None)])
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
self.attrs_dict = self.class_basic_attrs.copy()
|
||||
@@ -304,11 +299,7 @@ def place_time_delta(value):
|
||||
|
||||
@ModelFormatter.col_format(11, ModelFormatter.VIEW_FORMATTER)
|
||||
def view_time_delta(value):
|
||||
return "{:.3f}".format(value)
|
||||
|
||||
|
||||
def is_column(index, column_name):
|
||||
return index.column() == columns.index(column_name)
|
||||
return "{:.3f}".format(value)
|
||||
|
||||
|
||||
class CopterDataModel(QtCore.QAbstractTableModel):
|
||||
@@ -479,7 +470,7 @@ class CopterDataModel(QtCore.QAbstractTableModel):
|
||||
self.update_model(index, role)
|
||||
return True
|
||||
|
||||
def select_all(self): # probably NOT thread-safe! TODO remake
|
||||
def select_all(self): # probably NOT thread-safe!
|
||||
self.first_col_is_checked = not self.first_col_is_checked
|
||||
for row_num, copter in enumerate(self.data_contents):
|
||||
copter.states.checked = int(self.first_col_is_checked)*2
|
||||
@@ -489,37 +480,8 @@ class CopterDataModel(QtCore.QAbstractTableModel):
|
||||
roles = Qt.ItemIsSelectable | Qt.ItemIsEnabled
|
||||
if index.column() == 0:
|
||||
roles |= Qt.ItemIsUserCheckable | Qt.ItemIsEditable
|
||||
if is_column(index, "config_version"):
|
||||
roles |= Qt.ItemIsDragEnabled # | Qt.ItemIsDropEnabled
|
||||
|
||||
return roles
|
||||
|
||||
def supportedDropActions(self):
|
||||
return QtCore.Qt.CopyAction
|
||||
|
||||
def mimeTypes(self):
|
||||
return ['text/plain']
|
||||
|
||||
def mimeData(self, indexes):
|
||||
index = indexes[0]
|
||||
if is_column(index, "config_version"):
|
||||
return self._config_mime(index)
|
||||
|
||||
return None
|
||||
|
||||
def _config_mime(self, index):
|
||||
mimedata = QtCore.QMimeData()
|
||||
path = os.path.join(QDir.tempPath(), "config_{}.ini".format(
|
||||
self.data_contents[index.row()].copter_id))
|
||||
|
||||
with suppress(OSError): # remove if file exists
|
||||
os.remove(path)
|
||||
|
||||
self.data_contents[index.row()].client.get_file("config/client.ini", path,)
|
||||
mimedata.setUrls([QUrl.fromLocalFile(path)])
|
||||
|
||||
return mimedata
|
||||
|
||||
@QtCore.pyqtSlot(int, int, QtCore.QVariant, QtCore.QVariant)
|
||||
def update_item(self, row, col, value, role=Qt.EditRole):
|
||||
self.setData(self.index(row, col), value, role)
|
||||
|
||||
@@ -8,7 +8,6 @@ import datetime
|
||||
import threading
|
||||
import selectors
|
||||
import collections
|
||||
import traceback
|
||||
|
||||
import inspect # Add parent dir to PATH to import messaging_lib and config_lib
|
||||
|
||||
@@ -157,7 +156,6 @@ class Server(messaging.Singleton):
|
||||
client.process_events(mask)
|
||||
except Exception as error:
|
||||
logging.error("Exception {} occurred for {}! Resetting connection!".format(error, client.addr))
|
||||
traceback.print_exc()
|
||||
client.close(True)
|
||||
else: # Notifier
|
||||
client.process_events(mask)
|
||||
@@ -187,9 +185,9 @@ class Server(messaging.Singleton):
|
||||
|
||||
def _ip_broadcast(self):
|
||||
logging.info("Broadcast sender thread started!")
|
||||
msg = messaging.MessageManager.create_action_message(
|
||||
"server_ip", kwargs={"host": self.ip, "port": str(self.config.server_port), "id": self.id,
|
||||
"start_time": str(self.time_started)})
|
||||
msg = messaging.MessageManager.create_simple_message(
|
||||
"server_ip", {"host": self.ip, "port": str(self.config.server_port), "id": self.id,
|
||||
"start_time": str(self.time_started)})
|
||||
logging.debug("Formed broadcast message: {}".format(msg))
|
||||
|
||||
broadcast_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||
@@ -233,11 +231,11 @@ class Server(messaging.Singleton):
|
||||
message.process_message()
|
||||
content = message.content
|
||||
|
||||
right_command = (content and message.jsonheader["action"] == "server_ip")
|
||||
right_command = (content and content["command"] == "server_ip")
|
||||
|
||||
if right_command:
|
||||
different_id = content["kwargs"]["id"] != str(self.id)
|
||||
self_younger = float(content["kwargs"]["start_time"]) <= self.time_started
|
||||
different_id = content["args"]["id"] != str(self.id)
|
||||
self_younger = float(message.content["args"]["start_time"]) <= self.time_started
|
||||
|
||||
if different_id and self_younger:
|
||||
# younger server should shut down
|
||||
@@ -255,7 +253,7 @@ class Server(messaging.Singleton):
|
||||
logging.info("Broadcast listener thread stopped, socked closed!")
|
||||
|
||||
def send_starttime(self, copter, start_time):
|
||||
copter.send_message("start", kwargs={"time": str(start_time)})
|
||||
copter.send_message("start", {"time": str(start_time)})
|
||||
|
||||
|
||||
def requires_connect(f):
|
||||
@@ -358,7 +356,7 @@ class Client(messaging.ConnectionManager):
|
||||
@classmethod
|
||||
@requires_any_connected
|
||||
def broadcast_message(cls, command, args=None, force_all=False):
|
||||
cls.broadcast(messaging.MessageManager.create_action_message(command, args), force_all)
|
||||
cls.broadcast(messaging.MessageManager.create_simple_message(command, args), force_all)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -127,7 +127,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.ui.action_send_any_file.triggered.connect(self.send_any_file)
|
||||
self.ui.action_send_any_command.triggered.connect(self.send_any_command)
|
||||
self.ui.action_restart_clever.triggered.connect(
|
||||
b_partial(self.send_to_selected, "service_restart", kwargs={"name": "clever"}))
|
||||
b_partial(self.send_to_selected, "service_restart", {"name": "clever"}))
|
||||
self.ui.action_restart_clever_show.triggered.connect(self.restart_clever_show)
|
||||
self.ui.action_update_client_repo.triggered.connect(b_partial(self.send_to_selected, "update_repo"))
|
||||
self.ui.action_reboot_all.triggered.connect(b_partial(self.send_to_selected, "reboot_all"))
|
||||
@@ -200,9 +200,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
yield f(copter, *args, **kwargs)
|
||||
|
||||
@pyqtSlot()
|
||||
def send_to_selected(self, command, command_args=(), command_kwargs=None):
|
||||
return list(self.iterate_selected(lambda copter: copter.client.send_message(
|
||||
command, command_args, command_kwargs)))
|
||||
def send_to_selected(self, command, command_args=None):
|
||||
return list(self.iterate_selected(lambda copter: copter.client.send_message(command, command_args)))
|
||||
|
||||
def new_client_connected(self, client: Client):
|
||||
logging.debug("Added client {}".format(client))
|
||||
@@ -238,14 +237,13 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
"animation_id": 2,
|
||||
"battery": 3,
|
||||
"fcu_status": 4,
|
||||
"calibration_status": 5,
|
||||
"cal_status": 5,
|
||||
"mode": 6,
|
||||
"selfcheck": 7,
|
||||
"current_position": 8,
|
||||
"start_position": 9,
|
||||
"task": 10,
|
||||
"time": 11,
|
||||
"config_version": 12,
|
||||
}
|
||||
|
||||
for key, value in telems.items():
|
||||
@@ -288,7 +286,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.ui.pause_button.setText('Resume')
|
||||
else:
|
||||
time_gap = 0.1 # TODO config? automatic delay detection?
|
||||
self.send_to_selected("resume", kwargs={"time": server.time_now() + time_gap})
|
||||
self.send_to_selected("resume", {"time": server.time_now() + time_gap})
|
||||
self.ui.pause_button.setText('Pause')
|
||||
|
||||
@pyqtSlot()
|
||||
@@ -297,7 +295,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
for copter in self.model.user_selected():
|
||||
if self.model.checks.takeoff_checks(copter):
|
||||
if self.ui.z_checkbox.isChecked():
|
||||
copter.client.send_message("takeoff_z", {"z": str(self.ui.z_spin.value())}) # todo int, merge commands
|
||||
copter.client.send_message("takeoff_z", {"z": str(self.ui.z_spin.value())}) # todo int
|
||||
else:
|
||||
copter.client.send_message("takeoff")
|
||||
|
||||
@@ -427,7 +425,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
@pyqtSlot()
|
||||
def send_aruco(self):
|
||||
def callback(copter):
|
||||
copter.client.send_message("service_restart", kwargs={"name": "clever"})
|
||||
copter.client.send_message("service_restart", {"name": "clever"})
|
||||
|
||||
self.send_files("Select aruco map configuration file", "Aruco map files (*.txt)", onefile=True,
|
||||
client_path="/home/pi/catkin_ws/src/clever/aruco_pose/map/",
|
||||
@@ -467,20 +465,20 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
copters = self.model.user_selected()
|
||||
for copter in copters:
|
||||
copter.client.send_message("config", kwargs={"config": data, "mode": mode.lower()})
|
||||
copter.client.send_message("config", {"config": data, "mode": mode.lower()})
|
||||
|
||||
@pyqtSlot()
|
||||
def send_any_command(self):
|
||||
text, ok = QInputDialog.getText(self, "Enter command to send on copter",
|
||||
"Command:", QLineEdit.Normal, "")
|
||||
if ok and text:
|
||||
self.send_to_selected("execute", kwargs={"command": text})
|
||||
self.send_to_selected("execute", {"command": text})
|
||||
|
||||
@pyqtSlot()
|
||||
def restart_clever_show(self):
|
||||
for copter in self.model.user_selected():
|
||||
copter.client.send_message("service_restart", kwargs={"name": "visual_pose_watchdog"})
|
||||
copter.client.send_message("service_restart", kwargs={"name": "clever-show"})
|
||||
copter.client.send_message("service_restart", {"name": "visual_pose_watchdog"})
|
||||
copter.client.send_message("service_restart", {"name": "clever-show"})
|
||||
|
||||
@pyqtSlot()
|
||||
def restart_chrony(self):
|
||||
|
||||
Reference in New Issue
Block a user