New server gui and functionality, updated configspec

This commit is contained in:
Artem30801
2020-01-31 23:13:14 +03:00
parent e2fc35805f
commit 6a9e7930cc
4 changed files with 353 additions and 230 deletions

View File

@@ -2,47 +2,47 @@ config_name = string(default='Copter config')
config_version = float(default='0.0')
[SERVER]
port = integer(default=25000)
buffer_size = integer(default=1024)
port = integer(default=25000)
buffer_size = integer(default=1024)
[TABLE]
# True -> clients are removed on disconnection
# False -> disconnected clients indicated
remove_disconnected = boolean(default=False)
# True -> clients are removed on disconnection
# False -> disconnected clients indicated
remove_disconnected = boolean(default=False)
[[PRESETS]]
current = string(default="DEFAULT")
[[[DEFAULT]]]
copter_id = boolean(default=True)
git_version = boolean(default=True)
animation_id = boolean(default=True)
battery = boolean(default=True)
fcu_status = boolean(default=True)
calibration_status = boolean(default=True)
mode = boolean(default=True)
selfcheck = boolean(default=True)
current_position = boolean(default=True)
start_position = boolean(default=True)
last_task = boolean(default=True)
time_delta = boolean(default=True)
config_version = boolean(default=True)
[[[__many__]]]
__many__ = boolean
current = string(default="DEFAULT")
[[[DEFAULT]]]
copter_id = boolean(default=True)
git_version = boolean(default=True)
animation_id = boolean(default=True)
battery = boolean(default=True)
fcu_status = boolean(default=True)
calibration_status = boolean(default=True)
mode = boolean(default=True)
selfcheck = boolean(default=True)
current_position = boolean(default=True)
start_position = boolean(default=True)
last_task = boolean(default=True)
time_delta = boolean(default=True)
config_version = boolean(default=True)
[[[__many__]]]
__many__ = boolean
[CHECKS]
battery_min = float(default=50.0, min=0, max=100)
# in meters
start_pos_delta_max = float(default=1.0, min=0)
# in meters
time_delta_max = float(default=1.0, min=0)
battery_min = float(default=50.0, min=0, max=100)
# in meters
start_pos_delta_max = float(default=1.0, min=0)
# in meters
time_delta_max = float(default=1.0, min=0)
[BROADCAST]
send = boolean(default=True)
listen = boolean(default=True)
port = integer(default=8181)
# delay for message sending in seconds
delay = float(default=5.0, min=0)
send = boolean(default=True)
listen = boolean(default=True)
port = integer(default=8181)
# delay for message sending in seconds
delay = float(default=5.0, min=0)
[NTP]
use = boolean(default=False)
host = string(default=ntp1.stratum2.ru)
port = integer(default=123)
use = boolean(default=False)
host = string(default=ntp1.stratum2.ru)
port = integer(default=123)

View File

@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'server_gui.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
# Created by: PyQt5 UI code generator 5.14.0
#
# WARNING! All changes made in this file will be lost!
@@ -13,7 +13,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1360, 761)
MainWindow.resize(1360, 816)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setEnabled(True)
self.centralwidget.setObjectName("centralwidget")
@@ -51,23 +51,23 @@ class Ui_MainWindow(object):
self.start_text.setLayoutDirection(QtCore.Qt.RightToLeft)
self.start_text.setAlignment(QtCore.Qt.AlignCenter)
self.start_text.setObjectName("start_text")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.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(2, QtWidgets.QFormLayout.FieldRole, self.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(3, QtWidgets.QFormLayout.LabelRole, self.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(3, QtWidgets.QFormLayout.FieldRole, self.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(4, QtWidgets.QFormLayout.LabelRole, self.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)
@@ -76,12 +76,12 @@ class Ui_MainWindow(object):
self.music_checkbox.setSizePolicy(sizePolicy)
self.music_checkbox.setFocusPolicy(QtCore.Qt.NoFocus)
self.music_checkbox.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.music_checkbox.setLayoutDirection(QtCore.Qt.RightToLeft)
self.music_checkbox.setLayoutDirection(QtCore.Qt.LeftToRight)
self.music_checkbox.setAutoFillBackground(False)
self.music_checkbox.setText("")
self.music_checkbox.setChecked(False)
self.music_checkbox.setObjectName("music_checkbox")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.music_checkbox)
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.music_checkbox)
self.verticalLayout.addLayout(self.formLayout)
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
@@ -117,10 +117,10 @@ class Ui_MainWindow(object):
self.formLayout_5.setObjectName("formLayout_5")
self.land_selected_button = QtWidgets.QPushButton(self.centralwidget)
self.land_selected_button.setObjectName("land_selected_button")
self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.land_selected_button)
self.formLayout_5.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.land_selected_button)
self.land_all_button = QtWidgets.QPushButton(self.centralwidget)
self.land_all_button.setObjectName("land_all_button")
self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.land_all_button)
self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.land_all_button)
self.verticalLayout.addLayout(self.formLayout_5)
self.line_6 = QtWidgets.QFrame(self.centralwidget)
self.line_6.setFrameShape(QtWidgets.QFrame.HLine)
@@ -146,14 +146,13 @@ class Ui_MainWindow(object):
self.formLayout_3 = QtWidgets.QFormLayout()
self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignCenter)
self.formLayout_3.setFormAlignment(QtCore.Qt.AlignCenter)
self.formLayout_3.setVerticalSpacing(6)
self.formLayout_3.setObjectName("formLayout_3")
self.disarm_all_button = QtWidgets.QPushButton(self.centralwidget)
self.disarm_all_button.setObjectName("disarm_all_button")
self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disarm_all_button)
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.disarm_all_button)
self.disarm_selected_button = QtWidgets.QPushButton(self.centralwidget)
self.disarm_selected_button.setObjectName("disarm_selected_button")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.disarm_selected_button)
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.disarm_selected_button)
self.verticalLayout.addLayout(self.formLayout_3)
self.line_3 = QtWidgets.QFrame(self.centralwidget)
self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
@@ -164,22 +163,17 @@ class Ui_MainWindow(object):
self.formLayout_4.setLabelAlignment(QtCore.Qt.AlignCenter)
self.formLayout_4.setFormAlignment(QtCore.Qt.AlignCenter)
self.formLayout_4.setObjectName("formLayout_4")
self.flip_button = QtWidgets.QPushButton(self.centralwidget)
self.flip_button.setObjectName("flip_button")
self.formLayout_4.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.flip_button)
self.leds_button = QtWidgets.QPushButton(self.centralwidget)
self.leds_button.setObjectName("leds_button")
self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.leds_button)
self.takeoff_button = QtWidgets.QPushButton(self.centralwidget)
self.takeoff_button.setEnabled(True)
self.takeoff_button.setObjectName("takeoff_button")
self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.takeoff_button)
self.leds_button = QtWidgets.QPushButton(self.centralwidget)
self.leds_button.setObjectName("leds_button")
self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.leds_button)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.z_checkbox = QtWidgets.QCheckBox(self.centralwidget)
self.z_checkbox.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.z_checkbox.setFocusPolicy(QtCore.Qt.NoFocus)
self.z_checkbox.setLayoutDirection(QtCore.Qt.LeftToRight)
self.z_checkbox.setObjectName("z_checkbox")
self.horizontalLayout_2.addWidget(self.z_checkbox)
@@ -189,7 +183,10 @@ class Ui_MainWindow(object):
self.z_spin.setProperty("value", 1.0)
self.z_spin.setObjectName("z_spin")
self.horizontalLayout_2.addWidget(self.z_spin)
self.formLayout_4.setLayout(4, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_2)
self.formLayout_4.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_2)
self.flip_button = QtWidgets.QPushButton(self.centralwidget)
self.flip_button.setObjectName("flip_button")
self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.flip_button)
self.verticalLayout.addLayout(self.formLayout_4)
self.line_4 = QtWidgets.QFrame(self.centralwidget)
self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
@@ -215,27 +212,29 @@ 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, 22))
self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 26))
self.menubar.setObjectName("menubar")
self.menuOptions = QtWidgets.QMenu(self.menubar)
self.menuOptions.setObjectName("menuOptions")
self.menuDeveloper_mode = QtWidgets.QMenu(self.menuOptions)
self.menuDeveloper_mode.setObjectName("menuDeveloper_mode")
self.menuAnimation = QtWidgets.QMenu(self.menubar)
self.menuAnimation.setObjectName("menuAnimation")
self.menuDrone = QtWidgets.QMenu(self.menubar)
self.menuDrone.setObjectName("menuDrone")
self.menuDeveloper_mode_2 = QtWidgets.QMenu(self.menuDrone)
self.menuDeveloper_mode_2.setObjectName("menuDeveloper_mode_2")
self.menuMusic = QtWidgets.QMenu(self.menubar)
self.menuMusic.setObjectName("menuMusic")
self.menuMusic_2 = QtWidgets.QMenu(self.menuOptions)
self.menuMusic_2.setObjectName("menuMusic_2")
self.menuTable = QtWidgets.QMenu(self.menubar)
self.menuTable.setObjectName("menuTable")
self.menuDrone_2 = QtWidgets.QMenu(self.menubar)
self.menuDrone_2.setObjectName("menuDrone_2")
self.menuSend = QtWidgets.QMenu(self.menuDrone_2)
self.menuSend.setObjectName("menuSend")
self.menuRestart = QtWidgets.QMenu(self.menuDrone_2)
self.menuRestart.setObjectName("menuRestart")
self.menuRetrive = QtWidgets.QMenu(self.menuDrone_2)
self.menuRetrive.setObjectName("menuRetrive")
MainWindow.setMenuBar(self.menubar)
self.action_send_animations = QtWidgets.QAction(MainWindow)
self.action_send_animations.setObjectName("action_send_animations")
self.action_send_configurations = QtWidgets.QAction(MainWindow)
self.action_send_configurations.setObjectName("action_send_configurations")
self.action_send_Aruco_map = QtWidgets.QAction(MainWindow)
self.action_send_Aruco_map.setObjectName("action_send_Aruco_map")
self.action_send_aruco_map = QtWidgets.QAction(MainWindow)
self.action_send_aruco_map.setObjectName("action_send_aruco_map")
self.action_update_client_repo = QtWidgets.QAction(MainWindow)
self.action_update_client_repo.setObjectName("action_update_client_repo")
self.actionSend_launch_file_for_clever = QtWidgets.QAction(MainWindow)
@@ -280,38 +279,69 @@ class Ui_MainWindow(object):
self.action_restart_chrony.setObjectName("action_restart_chrony")
self.action_send_fcu_parameters = QtWidgets.QAction(MainWindow)
self.action_send_fcu_parameters.setObjectName("action_send_fcu_parameters")
self.menuDeveloper_mode.addAction(self.action_send_any_file)
self.menuDeveloper_mode.addAction(self.action_send_any_command)
self.menuOptions.addAction(self.action_send_animations)
self.menuOptions.addAction(self.action_send_configurations)
self.menuOptions.addAction(self.action_send_launch_file)
self.menuOptions.addAction(self.action_send_Aruco_map)
self.menuOptions.addAction(self.action_send_calibrations)
self.menuOptions.addAction(self.action_send_fcu_parameters)
self.action_toggle_select = QtWidgets.QAction(MainWindow)
self.action_toggle_select.setObjectName("action_toggle_select")
self.action_select_all = QtWidgets.QAction(MainWindow)
self.action_select_all.setObjectName("action_select_all")
self.action_deselect_all = QtWidgets.QAction(MainWindow)
self.action_deselect_all.setObjectName("action_deselect_all")
self.action_edit_server_config = QtWidgets.QAction(MainWindow)
self.action_edit_server_config.setObjectName("action_edit_server_config")
self.action_edit_any_config = QtWidgets.QAction(MainWindow)
self.action_edit_any_config.setObjectName("action_edit_any_config")
self.action_update_server_git = QtWidgets.QAction(MainWindow)
self.action_update_server_git.setObjectName("action_update_server_git")
self.action_retrive_any_file = QtWidgets.QAction(MainWindow)
self.action_retrive_any_file.setObjectName("action_retrive_any_file")
self.action_restart_server = QtWidgets.QAction(MainWindow)
self.action_restart_server.setObjectName("action_restart_server")
self.action_configure_columns = QtWidgets.QAction(MainWindow)
self.action_configure_columns.setObjectName("action_configure_columns")
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)
self.menuOptions.addAction(self.menuMusic_2.menuAction())
self.menuOptions.addSeparator()
self.menuOptions.addAction(self.menuDeveloper_mode.menuAction())
self.menuOptions.addAction(self.action_edit_server_config)
self.menuOptions.addAction(self.action_edit_any_config)
self.menuOptions.addSeparator()
self.menuOptions.addAction(self.action_select_all_rows)
self.menuAnimation.addAction(self.action_set_start_to_current_position)
self.menuAnimation.addAction(self.action_reset_start)
self.menuDeveloper_mode_2.addAction(self.action_restart_clever)
self.menuDeveloper_mode_2.addAction(self.action_restart_clever_show)
self.menuDeveloper_mode_2.addAction(self.action_update_client_repo)
self.menuDeveloper_mode_2.addAction(self.action_reboot_all)
self.menuDrone.addAction(self.action_set_z_offset_to_ground)
self.menuDrone.addAction(self.action_reset_z_offset)
self.menuDrone.addSeparator()
self.menuDrone.addAction(self.action_restart_chrony)
self.menuDrone.addAction(self.action_remove_row)
self.menuDrone.addSeparator()
self.menuDrone.addAction(self.menuDeveloper_mode_2.menuAction())
self.menuMusic.addAction(self.action_select_music_file)
self.menuMusic.addAction(self.action_play_music)
self.menuMusic.addAction(self.action_stop_music)
self.menuOptions.addAction(self.action_update_server_git)
self.menuOptions.addAction(self.action_restart_server)
self.menuTable.addAction(self.action_toggle_select)
self.menuTable.addAction(self.action_select_all)
self.menuTable.addAction(self.action_deselect_all)
self.menuTable.addSeparator()
self.menuTable.addAction(self.action_remove_row)
self.menuTable.addSeparator()
self.menuTable.addAction(self.action_configure_columns)
self.menuSend.addAction(self.action_send_animations)
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)
self.menuSend.addAction(self.action_send_any_command)
self.menuRestart.addAction(self.action_restart_chrony)
self.menuRestart.addAction(self.action_restart_clever)
self.menuRestart.addAction(self.action_restart_clever_show)
self.menuRestart.addSeparator()
self.menuRestart.addAction(self.action_reboot_all)
self.menuRetrive.addAction(self.action_retrive_any_file)
self.menuDrone_2.addAction(self.menuSend.menuAction())
self.menuDrone_2.addAction(self.menuRetrive.menuAction())
self.menuDrone_2.addAction(self.menuRestart.menuAction())
self.menuDrone_2.addSeparator()
self.menuDrone_2.addAction(self.action_reset_z_offset)
self.menuDrone_2.addAction(self.action_set_z_offset_to_ground)
self.menuDrone_2.addAction(self.action_set_start_to_current_position)
self.menuDrone_2.addAction(self.action_reset_start)
self.menuDrone_2.addSeparator()
self.menuDrone_2.addAction(self.action_update_client_repo)
self.menubar.addAction(self.menuOptions.menuAction())
self.menubar.addAction(self.menuDrone.menuAction())
self.menubar.addAction(self.menuAnimation.menuAction())
self.menubar.addAction(self.menuMusic.menuAction())
self.menubar.addAction(self.menuTable.menuAction())
self.menubar.addAction(self.menuDrone_2.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
@@ -334,23 +364,24 @@ class Ui_MainWindow(object):
self.emergency_land_button.setText(_translate("MainWindow", "Emergency land"))
self.disarm_all_button.setText(_translate("MainWindow", "Disarm ALL"))
self.disarm_selected_button.setText(_translate("MainWindow", "Disarm selected"))
self.flip_button.setText(_translate("MainWindow", "Flip"))
self.takeoff_button.setText(_translate("MainWindow", "Takeoff"))
self.leds_button.setText(_translate("MainWindow", "Test leds"))
self.takeoff_button.setText(_translate("MainWindow", "Takeoff"))
self.z_checkbox.setText(_translate("MainWindow", " Z ="))
self.z_spin.setSuffix(_translate("MainWindow", " m"))
self.flip_button.setText(_translate("MainWindow", "Flip"))
self.reboot_fcu.setText(_translate("MainWindow", "Reboot FCU"))
self.calibrate_gyro.setText(_translate("MainWindow", "Calibrate gyro"))
self.calibrate_level.setText(_translate("MainWindow", "Calibrate level"))
self.menuOptions.setTitle(_translate("MainWindow", "Server"))
self.menuDeveloper_mode.setTitle(_translate("MainWindow", "Developer mode"))
self.menuAnimation.setTitle(_translate("MainWindow", "Animation"))
self.menuDrone.setTitle(_translate("MainWindow", "Drone"))
self.menuDeveloper_mode_2.setTitle(_translate("MainWindow", "Developer mode"))
self.menuMusic.setTitle(_translate("MainWindow", "Music"))
self.menuMusic_2.setTitle(_translate("MainWindow", "Music"))
self.menuTable.setTitle(_translate("MainWindow", "Table"))
self.menuDrone_2.setTitle(_translate("MainWindow", "Drone"))
self.menuSend.setTitle(_translate("MainWindow", "Send"))
self.menuRestart.setTitle(_translate("MainWindow", "Restart"))
self.menuRetrive.setTitle(_translate("MainWindow", "Retrive"))
self.action_send_animations.setText(_translate("MainWindow", "Send animations"))
self.action_send_configurations.setText(_translate("MainWindow", "Send configurations"))
self.action_send_Aruco_map.setText(_translate("MainWindow", "Send aruco map"))
self.action_send_aruco_map.setText(_translate("MainWindow", "Send 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", "Send launch files"))
@@ -369,8 +400,31 @@ class Ui_MainWindow(object):
self.action_send_any_file.setText(_translate("MainWindow", "Send any file"))
self.action_send_any_command.setText(_translate("MainWindow", "Send any command"))
self.action_stop_music.setText(_translate("MainWindow", "Stop music"))
self.action_remove_row.setText(_translate("MainWindow", "Remove from table"))
self.action_remove_row.setText(_translate("MainWindow", "Remove drone"))
self.action_remove_row.setShortcut(_translate("MainWindow", "Ctrl+Del"))
self.action_send_calibrations.setText(_translate("MainWindow", "Send camera calibrations"))
self.action_reboot_all.setText(_translate("MainWindow", "Reboot all"))
self.action_reboot_all.setText(_translate("MainWindow", "Reboot system"))
self.action_restart_chrony.setText(_translate("MainWindow", "Restart chrony"))
self.action_send_fcu_parameters.setText(_translate("MainWindow", "Send FCU parameters"))
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"))
self.action_select_all.setShortcut(_translate("MainWindow", "Shift+A"))
self.action_deselect_all.setText(_translate("MainWindow", "Deselect all"))
self.action_deselect_all.setShortcut(_translate("MainWindow", "Alt+A"))
self.action_edit_server_config.setText(_translate("MainWindow", "Edit server config"))
self.action_edit_any_config.setText(_translate("MainWindow", "Edit any config"))
self.action_update_server_git.setText(_translate("MainWindow", "Update server git"))
self.action_retrive_any_file.setText(_translate("MainWindow", "Retrive any file"))
self.action_restart_server.setText(_translate("MainWindow", "Restart server"))
self.action_configure_columns.setText(_translate("MainWindow", "Configure columns"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>1360</width>
<height>761</height>
<height>816</height>
</rect>
</property>
<property name="windowTitle">
@@ -76,7 +76,7 @@
<property name="formAlignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<item row="2" column="0">
<item row="0" column="0">
<widget class="QLabel" name="start_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
@@ -89,14 +89,14 @@
</property>
</widget>
</item>
<item row="2" column="1">
<item row="0" column="1">
<widget class="QSpinBox" name="start_delay_spin">
<property name="suffix">
<string> s</string>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="1" column="0">
<widget class="QLabel" name="music_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
@@ -106,7 +106,7 @@
</property>
</widget>
</item>
<item row="3" column="1">
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="music_delay_spin">
<property name="suffix">
<string> s</string>
@@ -119,7 +119,7 @@
</property>
</widget>
</item>
<item row="4" column="0">
<item row="2" column="0">
<widget class="QLabel" name="music_play_text">
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
@@ -129,7 +129,7 @@
</property>
</widget>
</item>
<item row="4" column="1">
<item row="2" column="1">
<widget class="QCheckBox" name="music_checkbox">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -144,7 +144,7 @@
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
<enum>Qt::LeftToRight</enum>
</property>
<property name="autoFillBackground">
<bool>false</bool>
@@ -224,14 +224,14 @@
<property name="topMargin">
<number>0</number>
</property>
<item row="1" column="1">
<item row="0" column="1">
<widget class="QPushButton" name="land_selected_button">
<property name="text">
<string>Land selected</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="1" column="1">
<widget class="QPushButton" name="land_all_button">
<property name="text">
<string>Land ALL</string>
@@ -286,17 +286,14 @@
<property name="formAlignment">
<set>Qt::AlignCenter</set>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="3" column="1">
<item row="0" column="1">
<widget class="QPushButton" name="disarm_all_button">
<property name="text">
<string>Disarm ALL</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="1" column="1">
<widget class="QPushButton" name="disarm_selected_button">
<property name="text">
<string>Disarm selected</string>
@@ -320,10 +317,10 @@
<property name="formAlignment">
<set>Qt::AlignCenter</set>
</property>
<item row="7" column="1">
<widget class="QPushButton" name="flip_button">
<item row="0" column="1">
<widget class="QPushButton" name="leds_button">
<property name="text">
<string>Flip</string>
<string>Test leds</string>
</property>
</widget>
</item>
@@ -337,26 +334,13 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="leds_button">
<property name="text">
<string>Test leds</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QCheckBox" name="z_checkbox">
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
@@ -383,6 +367,13 @@
</item>
</layout>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="flip_button">
<property name="text">
<string>Flip</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
@@ -435,71 +426,89 @@
<x>0</x>
<y>0</y>
<width>1360</width>
<height>22</height>
<height>26</height>
</rect>
</property>
<widget class="QMenu" name="menuOptions">
<property name="title">
<string>Server</string>
</property>
<widget class="QMenu" name="menuDeveloper_mode">
<widget class="QMenu" name="menuMusic_2">
<property name="title">
<string>Developer mode</string>
<string>Music</string>
</property>
<addaction name="action_send_any_file"/>
<addaction name="action_send_any_command"/>
<addaction name="action_select_music_file"/>
<addaction name="action_play_music"/>
<addaction name="action_stop_music"/>
</widget>
<addaction name="action_send_animations"/>
<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="menuMusic_2"/>
<addaction name="separator"/>
<addaction name="menuDeveloper_mode"/>
<addaction name="action_edit_server_config"/>
<addaction name="action_edit_any_config"/>
<addaction name="separator"/>
<addaction name="action_select_all_rows"/>
<addaction name="action_update_server_git"/>
<addaction name="action_restart_server"/>
</widget>
<widget class="QMenu" name="menuAnimation">
<widget class="QMenu" name="menuTable">
<property name="title">
<string>Animation</string>
<string>Table</string>
</property>
<addaction name="action_set_start_to_current_position"/>
<addaction name="action_reset_start"/>
<addaction name="action_toggle_select"/>
<addaction name="action_select_all"/>
<addaction name="action_deselect_all"/>
<addaction name="separator"/>
<addaction name="action_remove_row"/>
<addaction name="separator"/>
<addaction name="action_configure_columns"/>
</widget>
<widget class="QMenu" name="menuDrone">
<widget class="QMenu" name="menuDrone_2">
<property name="title">
<string>Drone</string>
</property>
<widget class="QMenu" name="menuDeveloper_mode_2">
<widget class="QMenu" name="menuSend">
<property name="title">
<string>Developer mode</string>
<string>Send</string>
</property>
<addaction name="action_send_animations"/>
<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"/>
<addaction name="action_send_any_command"/>
</widget>
<widget class="QMenu" name="menuRestart">
<property name="title">
<string>Restart</string>
</property>
<addaction name="action_restart_chrony"/>
<addaction name="action_restart_clever"/>
<addaction name="action_restart_clever_show"/>
<addaction name="action_update_client_repo"/>
<addaction name="separator"/>
<addaction name="action_reboot_all"/>
</widget>
<addaction name="action_set_z_offset_to_ground"/>
<widget class="QMenu" name="menuRetrive">
<property name="title">
<string>Retrive</string>
</property>
<addaction name="action_retrive_any_file"/>
</widget>
<addaction name="menuSend"/>
<addaction name="menuRetrive"/>
<addaction name="menuRestart"/>
<addaction name="separator"/>
<addaction name="action_reset_z_offset"/>
<addaction name="action_set_z_offset_to_ground"/>
<addaction name="action_set_start_to_current_position"/>
<addaction name="action_reset_start"/>
<addaction name="separator"/>
<addaction name="action_restart_chrony"/>
<addaction name="action_remove_row"/>
<addaction name="separator"/>
<addaction name="menuDeveloper_mode_2"/>
</widget>
<widget class="QMenu" name="menuMusic">
<property name="title">
<string>Music</string>
</property>
<addaction name="action_select_music_file"/>
<addaction name="action_play_music"/>
<addaction name="action_stop_music"/>
<addaction name="action_update_client_repo"/>
</widget>
<addaction name="menuOptions"/>
<addaction name="menuDrone"/>
<addaction name="menuAnimation"/>
<addaction name="menuMusic"/>
<addaction name="menuTable"/>
<addaction name="menuDrone_2"/>
</widget>
<action name="action_send_animations">
<property name="text">
@@ -511,7 +520,7 @@
<string>Send configurations</string>
</property>
</action>
<action name="action_send_Aruco_map">
<action name="action_send_aruco_map">
<property name="text">
<string>Send aruco map</string>
</property>
@@ -606,7 +615,10 @@
</action>
<action name="action_remove_row">
<property name="text">
<string>Remove from table</string>
<string>Remove drone</string>
</property>
<property name="shortcut">
<string>Ctrl+Del</string>
</property>
</action>
<action name="action_send_calibrations">
@@ -616,7 +628,7 @@
</action>
<action name="action_reboot_all">
<property name="text">
<string>Reboot all</string>
<string>Reboot system</string>
</property>
</action>
<action name="action_restart_chrony">
@@ -629,6 +641,60 @@
<string>Send FCU parameters</string>
</property>
</action>
<action name="action_toggle_select">
<property name="text">
<string>Toggle select</string>
</property>
<property name="shortcut">
<string>Ctrl+A</string>
</property>
</action>
<action name="action_select_all">
<property name="text">
<string>Select all</string>
</property>
<property name="shortcut">
<string>Shift+A</string>
</property>
</action>
<action name="action_deselect_all">
<property name="text">
<string>Deselect all</string>
</property>
<property name="shortcut">
<string>Alt+A</string>
</property>
</action>
<action name="action_edit_server_config">
<property name="text">
<string>Edit server config</string>
</property>
</action>
<action name="action_edit_any_config">
<property name="text">
<string>Edit any config</string>
</property>
</action>
<action name="action_update_server_git">
<property name="text">
<string>Update server git</string>
</property>
</action>
<action name="action_retrive_any_file">
<property name="text">
<string>Retrive any file</string>
</property>
</action>
<action name="action_restart_server">
<property name="text">
<string>Restart server</string>
</property>
</action>
<action name="action_configure_columns">
<property name="text">
<string>Configure columns</string>
</property>
</action>
</widget>
<tabstops>
<tabstop>start_delay_spin</tabstop>

View File

@@ -26,7 +26,7 @@ import messaging_lib as messaging
import config as cfg
import copter_table_models as table
from copter_table import CopterTableWidget
from copter_table import CopterTableWidget, HeaderEditDialog
from visual_land_dialog import VisualLandDialog
from config_editor_models import ConfigDialog
@@ -38,6 +38,8 @@ def multi_glob(*patterns):
def b_partial(func, *args, **kwargs): # call argument blocker partial
return lambda *a: func(*args, **kwargs)
def restart():
os.execl(sys.executable, os.path.abspath(__file__), *sys.argv)
def confirmation_required(text="Are you sure?", label="Confirm operation?"):
def inner(f):
@@ -100,11 +102,15 @@ class MainWindow(QtWidgets.QMainWindow):
self.player = QtMultimedia.QMediaPlayer()
def init_ui(self):
self.init_table()
# Connecting
self.ui.check_button.clicked.connect(self.selfcheck_selected)
self.ui.start_button.clicked.connect(self.send_start_time_selected)
self.ui.pause_button.clicked.connect(self.pause_resume_selected)
self.ui.z_checkbox.clicked.connect(self.ui.z_spin.setEnabled)
self.ui.land_all_button.clicked.connect(b_partial(Client.broadcast_message, "land"))
self.ui.land_selected_button.clicked.connect(b_partial(self.send_to_selected, "land"))
self.ui.disarm_all_button.clicked.connect(b_partial(Client.broadcast_message, "disarm"))
@@ -117,32 +123,40 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.reboot_fcu.clicked.connect(b_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)
self.ui.action_send_Aruco_map.triggered.connect(self.send_aruco)
self.ui.action_send_launch_file.triggered.connect(self.send_launch)
self.ui.action_send_fcu_parameters.triggered.connect(self.send_fcu_parameters)
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"}))
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"))
self.ui.action_set_start_to_current_position.triggered.connect(b_partial(self.send_to_selected, "move_start"))
self.ui.action_reset_start.triggered.connect(b_partial(self.send_to_selected, "reset_start"))
self.ui.action_set_z_offset_to_ground.triggered.connect(b_partial(self.send_to_selected, "set_z_to_ground"))
self.ui.action_reset_z_offset.triggered.connect(b_partial(self.send_to_selected, "reset_z_offset"))
self.ui.action_restart_chrony.triggered.connect(self.restart_chrony)
self.ui.action_select_music_file.triggered.connect(self.select_music_file)
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.ui.action_restart_server.triggered.connect(restart)
self.init_table()
self.ui.action_select_all.triggered.connect(partial(self.ui.copter_table.select_all, Qt.Checked))
self.ui.action_deselect_all.triggered.connect(partial(self.ui.copter_table.select_all, Qt.Unchecked))
self.ui.action_toggle_select.triggered.connect(self.ui.copter_table.toggle_select)
self.ui.action_remove_row.triggered.connect(self.remove_selected)
self.ui.action_configure_columns.triggered.connect(self.configure_columns)
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)
self.ui.action_send_aruco_map.triggered.connect(self.send_aruco)
self.ui.action_send_launch_file.triggered.connect(self.send_launch)
self.ui.action_send_fcu_parameters.triggered.connect(self.send_fcu_parameters)
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"}))
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"))
self.ui.action_set_start_to_current_position.triggered.connect(b_partial(self.send_to_selected, "move_start"))
self.ui.action_reset_start.triggered.connect(b_partial(self.send_to_selected, "reset_start"))
self.ui.action_set_z_offset_to_ground.triggered.connect(b_partial(self.send_to_selected, "set_z_to_ground"))
self.ui.action_reset_z_offset.triggered.connect(b_partial(self.send_to_selected, "reset_z_offset"))
self.ui.action_update_client_repo.triggered.connect(b_partial(self.send_to_selected, "update_repo"))
def init_table(self):
# Remove standard table widget
@@ -153,6 +167,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.copter_table.setObjectName("copter_table")
# Insert to layout at right
self.ui.horizontalLayout.insertWidget(0, self.ui.copter_table, 0)
self.ui.copter_table.setFocus()
def init_model(self):
# Connect model signals to UI
@@ -239,31 +254,16 @@ class MainWindow(QtWidgets.QMainWindow):
@pyqtSlot(object, dict)
def update_table_data(self, client, telems: dict):
cols_dict = {
"git_version": 1,
"animation_id": 2,
"battery": 3,
"fcu_status": 4,
"calibration_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():
col = cols_dict.get(key, None)
if col is None:
logging.error("No column {} present!".format(key))
continue
row_data = self.model.get_row_by_attr("client", client)
row_num = self.model.get_row_index(row_data)
if row_num is not None:
self.model.update_data(row_num, col, value, Qt.EditRole)
try:
col = self.model.index(key)
except ValueError:
logging.error(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)
if row_num is not None:
self.model.update_data(row_num, col, value, Qt.EditRole)
@pyqtSlot()
def remove_selected(self):
@@ -548,8 +548,11 @@ class MainWindow(QtWidgets.QMainWindow):
@pyqtSlot()
def visual_land(self):
dialog = VisualLandDialog(self.model)
dialog.start()
VisualLandDialog(self.model).start()
@pyqtSlot()
def configure_columns(self):
HeaderEditDialog(self.ui.copter_table, self.server.config).exec()
def register_callbacks(self):
@messaging.message_callback("telemetry")