21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 | def main_opt(
url: str = typer.Argument(
"http://localhost:8091",
envvar="COGIP_SOCKETIO_SERVER_URL",
help="Socket.IO Server URL",
),
) -> None:
"""
Launch COGIP Monitor.
"""
faulthandler.enable()
# Create socketio controller
controller = SocketioController(url)
# Create QApplication
app = QtWidgets.QApplication(sys.argv)
# Set icon theme so that icons are visible in Docker containers.
if Path("/usr/share/icons/Yaru-dark").exists():
QtGui.QIcon.setThemeName("Yaru-dark")
# Set dark theme
palette = app.palette()
palette.setColor(QtGui.QPalette.ColorRole.Window, "#2a2a2a")
palette.setColor(QtGui.QPalette.ColorRole.WindowText, "#ffffff")
palette.setColor(QtGui.QPalette.ColorRole.Base, "#2a2a2a")
palette.setColor(QtGui.QPalette.ColorRole.AlternateBase, "#272727")
palette.setColor(QtGui.QPalette.ColorRole.ToolTipBase, "#ffffdc")
palette.setColor(QtGui.QPalette.ColorRole.ToolTipText, "#000000")
palette.setColor(QtGui.QPalette.ColorRole.Text, "#ffffff")
palette.setColor(QtGui.QPalette.ColorRole.Button, "#2a2a2a")
palette.setColor(QtGui.QPalette.ColorRole.ButtonText, "#ffffff")
palette.setColor(QtGui.QPalette.ColorRole.BrightText, "#ffffff")
palette.setColor(QtGui.QPalette.ColorRole.Highlight, "#e95420")
palette.setColor(QtGui.QPalette.ColorRole.HighlightedText, "#ffffff")
palette.setColor(QtGui.QPalette.ColorRole.Light, "#343434")
palette.setColor(QtGui.QPalette.ColorRole.Midlight, "#2f2f2f")
palette.setColor(QtGui.QPalette.ColorRole.Dark, "#252525")
palette.setColor(QtGui.QPalette.ColorRole.Mid, "#2f2f2f")
palette.setColor(QtGui.QPalette.ColorRole.Shadow, "#020202")
palette.setColor(QtGui.QPalette.ColorRole.Link, "#308cc6")
palette.setColor(QtGui.QPalette.ColorRole.LinkVisited, "#ff00ff")
palette.setColor(QtGui.QPalette.ColorRole.NoRole, "#000000")
palette.setColor(QtGui.QPalette.ColorRole.PlaceholderText, "#9b9b9b")
palette.setColor(QtGui.QPalette.ColorRole.Accent, "#308cc6")
app.setPalette(palette)
# Create UI
win = MainWindow(url)
win.setWindowIcon(QtGui.QIcon("assets/cogip-logo.png"))
# Create table entity
table_entity = TableEntity()
win.game_view.add_asset(table_entity)
# Create robot entity
robot_manager = RobotManager(win)
# Connect UI signals to Controller slots
win.signal_send_command.connect(controller.new_command)
win.signal_config_updated.connect(controller.config_updated)
win.signal_wizard_response.connect(controller.wizard_response)
win.signal_actuators_opened.connect(controller.actuators_started)
win.signal_actuators_closed.connect(controller.actuators_closed)
win.signal_new_actuator_command.connect(controller.new_actuator_command)
win.signal_starter_changed.connect(controller.starter_changed)
# Connect UI signals to GameView slots
win.signal_add_obstacle.connect(win.game_view.add_obstacle)
win.signal_load_obstacles.connect(win.game_view.load_obstacles)
win.signal_save_obstacles.connect(win.game_view.save_obstacles)
# Connect GameView signals to robot manager slots
win.game_view.signal_update_shared_obstacles.connect(robot_manager.update_shared_obstacles)
# Connect Controller signals to robot manager
controller.signal_new_robot_pose_order.connect(robot_manager.new_robot_pose_order)
controller.signal_add_robot.connect(robot_manager.add_robot)
controller.signal_del_robot.connect(robot_manager.del_robot)
controller.signal_start_sensors_emulation.connect(robot_manager.start_sensors_emulation)
controller.signal_stop_sensors_emulation.connect(robot_manager.stop_sensors_emulation)
# Connect Controller signals to UI slots
controller.signal_new_console_text.connect(win.log_text.append)
controller.signal_new_menu.connect(win.load_menu)
controller.signal_add_robot.connect(win.add_robot)
controller.signal_del_robot.connect(win.del_robot)
controller.signal_starter_changed.connect(win.starter_changed)
controller.signal_new_robot_state.connect(win.new_robot_state)
controller.signal_connected.connect(win.connected)
controller.signal_exit.connect(win.close)
controller.signal_config_request.connect(win.config_request)
controller.signal_wizard_request.connect(win.wizard_request)
controller.signal_close_wizard.connect(win.close_wizard)
controller.signal_actuator_state.connect(win.actuator_state)
controller.signal_planner_reset.connect(win.planner_reset)
# Connect Controller signals to GameView slots
controller.signal_new_robot_path.connect(win.game_view.new_robot_path)
# Show UI
win.show()
# win.showFullScreen()
win.raise_()
controller.start()
ret = app.exec()
controller.stop()
robot_manager.disable_robots()
sys.exit(ret)
|