From 01287a766efec71ab6c9b38c61b37e0cfbd8c951 Mon Sep 17 00:00:00 2001 From: Arthur Golubtsov Date: Wed, 9 Oct 2019 18:43:30 +0300 Subject: [PATCH] Server: Update interface --- Server/server_gui.py | 54 ++++++++++++++++++++++++------------- Server/server_gui.ui | 64 ++++++++++++++++++++++++++++++-------------- Server/server_qt.py | 34 +++++++++++++---------- 3 files changed, 99 insertions(+), 53 deletions(-) diff --git a/Server/server_gui.py b/Server/server_gui.py index 0826274..a64c38b 100644 --- a/Server/server_gui.py +++ b/Server/server_gui.py @@ -173,12 +173,12 @@ class Ui_MainWindow(object): self.menuOptions.setObjectName("menuOptions") self.menuDeveloper_mode = QtWidgets.QMenu(self.menuOptions) self.menuDeveloper_mode.setObjectName("menuDeveloper_mode") - self.menuTable = QtWidgets.QMenu(self.menubar) - self.menuTable.setObjectName("menuTable") 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") MainWindow.setMenuBar(self.menubar) @@ -214,28 +214,40 @@ class Ui_MainWindow(object): self.action_play_music.setObjectName("action_play_music") self.action_test_music_after = QtWidgets.QAction(MainWindow) self.action_test_music_after.setObjectName("action_test_music_after") - self.menuDeveloper_mode.addAction(self.action_send_launch_file) - self.menuDeveloper_mode.addAction(self.action_restart_clever) - self.menuDeveloper_mode.addAction(self.action_restart_clever_show) - self.menuDeveloper_mode.addAction(self.action_update_client_repo) + self.actionFill = QtWidgets.QAction(MainWindow) + self.actionFill.setObjectName("actionFill") + self.action_send_any_file = QtWidgets.QAction(MainWindow) + self.action_send_any_file.setObjectName("action_send_any_file") + self.actionSend_any_command = QtWidgets.QAction(MainWindow) + self.actionSend_any_command.setObjectName("actionSend_any_command") + self.action_stop_music = QtWidgets.QAction(MainWindow) + self.action_stop_music.setObjectName("action_stop_music") + self.menuDeveloper_mode.addAction(self.action_send_any_file) + self.menuDeveloper_mode.addAction(self.actionSend_any_command) self.menuOptions.addAction(self.action_send_animations) self.menuOptions.addAction(self.action_send_configurations) self.menuOptions.addAction(self.action_send_Aruco_map) + self.menuOptions.addAction(self.action_send_launch_file) self.menuOptions.addSeparator() self.menuOptions.addAction(self.menuDeveloper_mode.menuAction()) - self.menuTable.addAction(self.action_select_all_rows) + 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.menuDrone.addAction(self.action_set_z_offset_to_ground) self.menuDrone.addAction(self.action_reset_z_offset) + 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_test_music_after) + self.menuMusic.addAction(self.action_stop_music) self.menubar.addAction(self.menuOptions.menuAction()) - self.menubar.addAction(self.menuAnimation.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.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) @@ -243,7 +255,7 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "Clever Drone Animation Player")) + MainWindow.setWindowTitle(_translate("MainWindow", "Clever Drone Show")) self.music_text.setText(_translate("MainWindow", " Music after")) self.music_delay_spin.setSuffix(_translate("MainWindow", " s")) self.music_play_text.setText(_translate("MainWindow", " Play music")) @@ -263,21 +275,21 @@ class Ui_MainWindow(object): 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", "Actions")) + self.menuOptions.setTitle(_translate("MainWindow", "Server")) self.menuDeveloper_mode.setTitle(_translate("MainWindow", "Developer mode")) - self.menuTable.setTitle(_translate("MainWindow", "Table")) 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.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_update_client_repo.setText(_translate("MainWindow", "Update client repo")) + 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_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 file to clever")) + self.action_send_launch_file.setText(_translate("MainWindow", "Send launch file to clever")) self.action_restart_clever.setText(_translate("MainWindow", "Restart clever service")) self.action_restart_clever_show.setText(_translate("MainWindow", "Restart clever-show service")) - self.action_select_all_rows.setText(_translate("MainWindow", "Select All")) + self.action_select_all_rows.setText(_translate("MainWindow", "Select all drones")) self.action_select_all_rows.setShortcut(_translate("MainWindow", "Ctrl+A")) self.action_set_start_to_current_position.setText(_translate("MainWindow", "Set start X Y to current position")) self.action_reset_start.setText(_translate("MainWindow", "Reset start position")) @@ -286,3 +298,7 @@ class Ui_MainWindow(object): self.action_select_music_file.setText(_translate("MainWindow", "Select music file")) self.action_play_music.setText(_translate("MainWindow", "Play music")) self.action_test_music_after.setText(_translate("MainWindow", "Test music after")) + self.actionFill.setText(_translate("MainWindow", "fill")) + self.action_send_any_file.setText(_translate("MainWindow", "Send any file")) + self.actionSend_any_command.setText(_translate("MainWindow", "Send any command")) + self.action_stop_music.setText(_translate("MainWindow", "Stop music")) diff --git a/Server/server_gui.ui b/Server/server_gui.ui index abeb6af..b734dd4 100644 --- a/Server/server_gui.ui +++ b/Server/server_gui.ui @@ -11,7 +11,7 @@ - Clever Drone Animation Player + Clever Drone Show @@ -333,27 +333,22 @@ - Actions + Server Developer mode - - - - + + + - - - - Table - + @@ -367,8 +362,18 @@ Drone + + + Developer mode + + + + + + + @@ -376,32 +381,31 @@ - + - + - - Send Animations + Send animations - Send Configurations + Send configurations - Send Aruco map + Send aruco map - Update client repo + Update clever-show git @@ -411,7 +415,7 @@ - Send .launch file to clever + Send launch file to clever @@ -426,7 +430,7 @@ - Select All + Select all drones Ctrl+A @@ -467,6 +471,26 @@ Test music after + + + fill + + + + + Send any file + + + + + Send any command + + + + + Stop music + + start_delay_spin diff --git a/Server/server_qt.py b/Server/server_qt.py index da30b9e..328d843 100644 --- a/Server/server_qt.py +++ b/Server/server_qt.py @@ -143,7 +143,7 @@ class MainWindow(QtWidgets.QMainWindow): self.ui.action_reset_z_offset.triggered.connect(self.reset_z_offset) 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_test_music_after.triggered.connect(self.test_music_after) + self.ui.action_stop_music.triggered.connect(self.stop_music) # Set most safety-important buttons disabled self.ui.start_button.setEnabled(False) @@ -390,47 +390,53 @@ class MainWindow(QtWidgets.QMainWindow): @pyqtSlot() def select_music_file(self): - path = QFileDialog.getOpenFileName(self, "Select music file", filter="Music files (*.mp3)")[0] + path = QFileDialog.getOpenFileName(self, "Select music file", filter="Music files (*.mp3 *.wav)")[0] if path: media = QUrl.fromLocalFile(path) content = QtMultimedia.QMediaContent(media) self.player.setMedia(content) + self.ui.action_select_music_file.setText(self.ui.action_select_music_file.text() + " (selected)") @pyqtSlot() def play_music(self): if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.InvalidMedia: - logger.info("Can't play media") + logging.info("Can't play media") return if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.NoMedia: - logger.info("No media file") + logging.info("No media file") return if self.player.state() == QtMultimedia.QMediaPlayer.StoppedState or \ self.player.state() == QtMultimedia.QMediaPlayer.PausedState: + self.ui.action_play_music.setText("Pause music") self.player.play() else: + self.ui.action_play_music.setText("Play music") self.player.pause() - + + @pyqtSlot() + def stop_music(self): + if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.InvalidMedia: + logging.info("Can't stop media") + return + if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.NoMedia: + logging.info("No media file") + return + self.player.stop() + @asyncio.coroutine def play_music_at_time(self, t): if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.InvalidMedia: - logger.info("Can't play media") + logging.info("Can't play media") return if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.NoMedia: - logger.info("No media file") + logging.info("No media file") return self.player.stop() yield from asyncio.sleep(t - time.time()) - #wait(t) logging.info("Playing music") self.player.play() - @pyqtSlot() - def test_music_after(self): - dt = self.ui.music_delay_spin.value() - asyncio.ensure_future(self.play_music_at_time(dt+time.time()), loop=loop) - logging.info('Wait {} seconds to play music'.format(dt)) - @pyqtSlot() def emergency(self): client_row_min = 0