Merge branch 'renaming_reorganization' of https://github.com/CopterExpress/clever-show into renaming_reorganization

This commit is contained in:
Artem30801
2020-06-01 14:57:14 +03:00
21 changed files with 2319 additions and 515 deletions

View File

@@ -17,17 +17,17 @@ config_version = float(default='1.0')
[[[DEFAULT]]]
copter_id = preset_param(default=list(True, 100))
git_version = preset_param(default=list(True, 75))
config_version = preset_param(default=list(True, 140))
animation_id = preset_param(default=list(True, 100))
config_version = preset_param(default=list(True, 105))
animation_info = preset_param(default=list(True, 100))
battery = preset_param(default=list(True, 100))
fcu_status = preset_param(default=list(True, 100))
calibration_status = preset_param(default=list(True, 65))
mode = preset_param(default=list(True, 100))
selfcheck = preset_param(default=list(True, 65))
current_position = preset_param(default=list(True, 250))
start_position = preset_param(default=list(True, 150))
last_task = preset_param(default=list(True, 250))
time_delta = preset_param(default=list(True, 100))
start_position = preset_param(default=list(True, 240))
last_task = preset_param(default=list(True, 275))
time_delta = preset_param(default=list(True, 70))
[[[__many__]]]
__many__ = preset_param

View File

@@ -226,8 +226,8 @@ class CopterTableWidget(QTableView):
@pyqtSlot(QtCore.QPoint)
def open_menu(self, point):
menu = QMenu(self)
index = self.indexAt(point)
item = self.model.get_row_data(index)
id = self.indexAt(point).siblingAtColumn(0).data()
item = self.model.get_row_by_attr('copter_id', id)
edit_config = QAction("Edit config")
edit_config.triggered.connect(partial(self.edit_copter_config, item))

View File

@@ -81,16 +81,19 @@ class ModelChecks:
def check_ver(item):
if not ModelChecks.check_git:
return True
version = get_git_version()
if version is not None:
return version == item
return True
@ModelChecks.column_check("animation_id")
@ModelChecks.column_check("animation_info")
def check_anim(item):
return str(item) != 'No animation'
if item:
return str(item[1]) == 'OK'
else:
return False
@ModelChecks.column_check("battery")
@@ -142,6 +145,10 @@ def check_time_delta(item):
@ModelChecks.column_check("start_position", pass_context=True)
def check_start_pos(item, context):
if len(item) == 6:
if not item[4] in ["takeoff", "fly"]:
return False
if ModelChecks.start_pos_delta_max == 0:
return True
@@ -150,6 +157,7 @@ def check_start_pos(item, context):
delta = get_distance(get_position(context.current_position),
get_position(context.start_position))
if math.isnan(delta):
return False
@@ -157,7 +165,7 @@ def check_start_pos(item, context):
def get_position(position):
if position != 'NO_POS' and position[0] != 'nan': # float('nan')?
if not isinstance(position, str) and position[0] != float('nan'):
return position[:3]
return [float('nan')] * 3
@@ -276,6 +284,17 @@ def place_id(value):
msgbox.exec_()
return None
@ModelFormatter.view_formatter("animation_info")
def view_animation_info(value):
try:
id, state = value
except ValueError:
return ""
else:
if state == 'OK':
return id
else:
return state
@ModelFormatter.place_formatter("battery")
def place_battery(value):
@@ -307,15 +326,18 @@ def view_selfcheck(value):
def view_current_position(value):
if isinstance(value, list):
x, y, z, yaw, frame = value
return f"{x: .2f} {y: .2f} {z: .2f} {int(yaw): d} {frame}"
return f"{x: .2f} {y: .2f} {z: .2f} {yaw: .0f} {frame}"
return value
@ModelFormatter.view_formatter("start_position")
def view_start_position(value):
if isinstance(value, list):
x, y, z = value
return f"{x: .2f} {y: .2f} {z: .2f}"
x, y, z, yaw, action, delay = value
if action in ['fly', 'takeoff']:
return f"{x: .2f} {y: .2f} {z: .2f} {yaw: .0f} {action} {delay: .1f}"
else:
return f"{action}"
return value
@@ -340,14 +362,14 @@ class CopterDataModel(QtCore.QAbstractTableModel):
columns_dict = {'copter_id': 'copter ID',
'git_version': 'version',
'config_version': 'configuration',
'animation_id': ' animation ID ',
'animation_info': 'animation ID',
'battery': ' battery ',
'fcu_status': 'FCU status',
'calibration_status': 'sensors',
'mode': ' mode ',
'selfcheck': ' checks ',
'current_position': 'current x y z yaw frame_id',
'start_position': ' start x y z ',
'start_position': 'start x y z yaw action delay',
'last_task': 'last task',
'time_delta': 'dt',
}

View File

@@ -13,7 +13,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1360, 816)
MainWindow.resize(1360, 869)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setEnabled(True)
self.centralwidget.setObjectName("centralwidget")
@@ -44,30 +44,22 @@ class Ui_MainWindow(object):
self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.verticalLayout.setObjectName("verticalLayout")
self.formLayout = QtWidgets.QFormLayout()
self.formLayout.setLabelAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.formLayout.setFormAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
self.formLayout.setObjectName("formLayout")
self.start_text = QtWidgets.QLabel(self.centralwidget)
self.start_text.setLayoutDirection(QtCore.Qt.RightToLeft)
self.start_text.setAlignment(QtCore.Qt.AlignCenter)
self.start_text.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.start_text.setObjectName("start_text")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.start_text)
self.start_delay_spin = QtWidgets.QSpinBox(self.centralwidget)
self.start_delay_spin.setObjectName("start_delay_spin")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.start_delay_spin)
self.music_text = QtWidgets.QLabel(self.centralwidget)
self.music_text.setLayoutDirection(QtCore.Qt.RightToLeft)
self.music_text.setObjectName("music_text")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.music_text)
self.music_delay_spin = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.music_delay_spin.setDecimals(1)
self.music_delay_spin.setMaximum(1000.0)
self.music_delay_spin.setObjectName("music_delay_spin")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.music_delay_spin)
self.music_play_text = QtWidgets.QLabel(self.centralwidget)
self.music_play_text.setLayoutDirection(QtCore.Qt.RightToLeft)
self.music_play_text.setObjectName("music_play_text")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.music_play_text)
self.music_checkbox = QtWidgets.QCheckBox(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -82,6 +74,14 @@ class Ui_MainWindow(object):
self.music_checkbox.setChecked(False)
self.music_checkbox.setObjectName("music_checkbox")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.music_checkbox)
self.music_text = QtWidgets.QLabel(self.centralwidget)
self.music_text.setLayoutDirection(QtCore.Qt.RightToLeft)
self.music_text.setObjectName("music_text")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.music_text)
self.music_play_text = QtWidgets.QLabel(self.centralwidget)
self.music_play_text.setLayoutDirection(QtCore.Qt.RightToLeft)
self.music_play_text.setObjectName("music_play_text")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.music_play_text)
self.verticalLayout.addLayout(self.formLayout)
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
@@ -212,7 +212,7 @@ class Ui_MainWindow(object):
self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 25))
self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 22))
self.menubar.setObjectName("menubar")
self.menuOptions = QtWidgets.QMenu(self.menubar)
self.menuOptions.setObjectName("menuOptions")
@@ -301,6 +301,8 @@ class Ui_MainWindow(object):
self.action_configure_columns.setObjectName("action_configure_columns")
self.actionSomething = QtWidgets.QAction(MainWindow)
self.actionSomething.setObjectName("actionSomething")
self.action_send_animation = QtWidgets.QAction(MainWindow)
self.action_send_animation.setObjectName("action_send_animation")
self.menuMusic_2.addAction(self.action_select_music_file)
self.menuMusic_2.addAction(self.action_play_music)
self.menuMusic_2.addAction(self.action_stop_music)
@@ -319,10 +321,12 @@ class Ui_MainWindow(object):
self.menuTable.addSeparator()
self.menuTable.addAction(self.action_configure_columns)
self.menuSend.addAction(self.action_send_animations)
self.menuSend.addAction(self.action_send_calibrations)
self.menuSend.addSeparator()
self.menuSend.addAction(self.action_send_aruco_map)
self.menuSend.addAction(self.action_send_animation)
self.menuSend.addAction(self.action_send_configurations)
self.menuSend.addAction(self.action_send_launch_file)
self.menuSend.addAction(self.action_send_aruco_map)
self.menuSend.addAction(self.action_send_calibrations)
self.menuSend.addAction(self.action_send_fcu_parameters)
self.menuSend.addSeparator()
self.menuSend.addAction(self.action_send_any_file)
@@ -357,8 +361,8 @@ class Ui_MainWindow(object):
MainWindow.setWindowTitle(_translate("MainWindow", "Clever Drone Show"))
self.start_text.setText(_translate("MainWindow", " Start after"))
self.start_delay_spin.setSuffix(_translate("MainWindow", " s"))
self.music_text.setText(_translate("MainWindow", " Music after"))
self.music_delay_spin.setSuffix(_translate("MainWindow", " s"))
self.music_text.setText(_translate("MainWindow", " Music after"))
self.music_play_text.setText(_translate("MainWindow", " Play music"))
self.check_button.setText(_translate("MainWindow", "Preflight check"))
self.start_button.setText(_translate("MainWindow", "Start animation"))
@@ -389,7 +393,7 @@ class Ui_MainWindow(object):
self.action_send_aruco_map.setText(_translate("MainWindow", "Aruco map"))
self.action_update_client_repo.setText(_translate("MainWindow", "Update clever-show git"))
self.actionSend_launch_file_for_clever.setText(_translate("MainWindow", "Send launch file for clever"))
self.action_send_launch_file.setText(_translate("MainWindow", "Launch files"))
self.action_send_launch_file.setText(_translate("MainWindow", "Launch files folder"))
self.action_restart_clever.setText(_translate("MainWindow", "clever"))
self.action_restart_clever_show.setText(_translate("MainWindow", "clever-show"))
self.action_select_all_rows.setText(_translate("MainWindow", "Select all drones"))
@@ -410,7 +414,7 @@ class Ui_MainWindow(object):
self.action_send_calibrations.setText(_translate("MainWindow", "Camera calibrations"))
self.action_reboot_all.setText(_translate("MainWindow", "Reboot"))
self.action_restart_chrony.setText(_translate("MainWindow", "chrony"))
self.action_send_fcu_parameters.setText(_translate("MainWindow", "FCU parameters"))
self.action_send_fcu_parameters.setText(_translate("MainWindow", "FCU parameters file"))
self.action_toggle_select.setText(_translate("MainWindow", "Toggle select"))
self.action_toggle_select.setShortcut(_translate("MainWindow", "Ctrl+A"))
self.action_select_all.setText(_translate("MainWindow", "Select all"))
@@ -424,3 +428,4 @@ class Ui_MainWindow(object):
self.action_restart_server.setText(_translate("MainWindow", "Restart server"))
self.action_configure_columns.setText(_translate("MainWindow", "Configure columns"))
self.actionSomething.setText(_translate("MainWindow", "something"))
self.action_send_animation.setText(_translate("MainWindow", "Animation"))

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>1360</width>
<height>816</height>
<height>869</height>
</rect>
</property>
<property name="windowTitle">
@@ -71,7 +71,7 @@
<item>
<layout class="QFormLayout" name="formLayout">
<property name="labelAlignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<property name="formAlignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
@@ -85,7 +85,7 @@
<string> Start after</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
@@ -96,16 +96,6 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="music_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string> Music after</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="music_delay_spin">
<property name="suffix">
@@ -119,16 +109,6 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="music_play_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string> Play music</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="music_checkbox">
<property name="sizePolicy">
@@ -157,6 +137,26 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="music_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string> Music after</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="music_play_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string> Play music</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
@@ -426,7 +426,7 @@
<x>0</x>
<y>0</y>
<width>1360</width>
<height>25</height>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="menuOptions">
@@ -470,10 +470,12 @@
<string>Send</string>
</property>
<addaction name="action_send_animations"/>
<addaction name="action_send_calibrations"/>
<addaction name="separator"/>
<addaction name="action_send_aruco_map"/>
<addaction name="action_send_animation"/>
<addaction name="action_send_configurations"/>
<addaction name="action_send_launch_file"/>
<addaction name="action_send_aruco_map"/>
<addaction name="action_send_calibrations"/>
<addaction name="action_send_fcu_parameters"/>
<addaction name="separator"/>
<addaction name="action_send_any_file"/>
@@ -538,7 +540,7 @@
</action>
<action name="action_send_launch_file">
<property name="text">
<string>Launch files</string>
<string>Launch files folder</string>
</property>
</action>
<action name="action_restart_clever">
@@ -639,7 +641,7 @@
</action>
<action name="action_send_fcu_parameters">
<property name="text">
<string>FCU parameters</string>
<string>FCU parameters file</string>
</property>
</action>
<action name="action_toggle_select">
@@ -707,6 +709,11 @@
<string>something</string>
</property>
</action>
<action name="action_send_animation">
<property name="text">
<string>Animation</string>
</property>
</action>
</widget>
<tabstops>
<tabstop>start_delay_spin</tabstop>

View File

@@ -112,10 +112,6 @@ class MainWindow(QtWidgets.QMainWindow):
self.init_model()
# self.statusBar = QStatusBar()
# self.setStatusBar(self.statusBar)
# self.statusBar.showMessage("Hey", 2000)
self.register_callbacks()
self.player = QtMultimedia.QMediaPlayer()
@@ -161,6 +157,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.action_send_animations.triggered.connect(self.send_animations)
self.ui.action_send_calibrations.triggered.connect(self.send_calibrations)
self.ui.action_send_animation.triggered.connect(self.send_animation)
self.ui.action_send_configurations.triggered.connect(self.send_config)
self.ui.action_send_aruco_map.triggered.connect(self.send_aruco)
self.ui.action_send_launch_file.triggered.connect(self.send_launch)
@@ -171,7 +168,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.action_retrive_any_file.triggered.connect(b_partial(self.request_any_file, client_path=None))
self.ui.action_restart_clever.triggered.connect(
b_partial(self.send_to_selected, "service_restart", command_kwargs={"name": "clever"}))
b_partial(self.send_to_selected, "service_restart", command_kwargs={"name": "clover"}))
self.ui.action_restart_clever_show.triggered.connect(self.restart_clever_show)
self.ui.action_restart_chrony.triggered.connect(self.restart_chrony)
self.ui.action_reboot_all.triggered.connect(b_partial(self.send_to_selected, "reboot_all"))
@@ -291,7 +288,7 @@ class MainWindow(QtWidgets.QMainWindow):
try:
col = self.model.columns.index(key)
except ValueError:
logging.error(f"No column {key} present!")
logging.debug(f"No column {key} present!")
else:
row_data = self.model.get_row_by_attr("client", client)
row_num = self.model.get_row_index(row_data)
@@ -481,6 +478,10 @@ class MainWindow(QtWidgets.QMainWindow):
self.send_directory_files("Select directory with animations", ('.csv', '.txt'), match_id=True,
client_path="", client_filename="animation.csv")
@pyqtSlot()
def send_animation(self):
self.send_files("Select animation file", "Animation files (*.csv)", onefile=True, client_filename="animation.csv")
@pyqtSlot()
def send_calibrations(self):
self.send_directory_files("Select directory with calibrations", ('.yaml', ), match_id=True,
@@ -646,7 +647,7 @@ if __name__ == "__main__":
msgbox_handler.setLevel(logging.CRITICAL)
logging.basicConfig(
level=logging.DEBUG,
level=logging.INFO,
format="%(asctime)s [%(name)-7.7s] [%(threadName)-19.19s] [%(levelname)-7.7s] %(message)s",
handlers=[
logging.FileHandler("server_logs/{}.log".format(now)),