cosmos 3.9.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +23 -0
  3. data/.travis.yml +1 -0
  4. data/.yardopts +3 -0
  5. data/Gemfile +1 -1
  6. data/Manifest.txt +137 -52
  7. data/Rakefile +50 -44
  8. data/autohotkey/config/system/system.txt +0 -5
  9. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
  10. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  11. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  12. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  13. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  14. data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  15. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  16. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  17. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  18. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  19. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  20. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  21. data/autohotkey/tools/CmdSequence +14 -0
  22. data/autohotkey/tools/CmdSequenceAHK +23 -0
  23. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  24. data/autohotkey/tools/cmd_extractor.ahk +2 -2
  25. data/autohotkey/tools/cmd_sender.ahk +4 -6
  26. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  27. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  28. data/autohotkey/tools/data_viewer.ahk +2 -3
  29. data/autohotkey/tools/limits_monitor.ahk +9 -11
  30. data/autohotkey/tools/open_gl_builder.ahk +1 -2
  31. data/autohotkey/tools/packet_viewer.ahk +51 -35
  32. data/autohotkey/tools/replay.ahk +1 -2
  33. data/autohotkey/tools/script_runner.ahk +1 -2
  34. data/autohotkey/tools/script_runner2.ahk +1 -2
  35. data/autohotkey/tools/test_runner2.ahk +1 -5
  36. data/autohotkey/tools/test_runner3.ahk +1 -3
  37. data/autohotkey/tools/tlm_grapher.ahk +1 -3
  38. data/autohotkey/tools/tlm_grapher3.ahk +1 -2
  39. data/autohotkey/tools/tlm_viewer.ahk +8 -3
  40. data/autohotkey/tools/tlm_viewer2.ahk +2 -3
  41. data/autohotkey/tools/tlm_viewer5.ahk +1 -2
  42. data/cosmos.gemspec +26 -20
  43. data/data/cmd_sequence.png +0 -0
  44. data/data/config/_array_params.yaml +23 -0
  45. data/data/config/_id_items.yaml +24 -0
  46. data/data/config/_id_params.yaml +58 -0
  47. data/data/config/_interfaces.yaml +206 -0
  48. data/data/config/_items.yaml +20 -0
  49. data/data/config/_params.yaml +58 -0
  50. data/data/config/cmd_tlm_server.yaml +110 -0
  51. data/data/config/command.yaml +38 -0
  52. data/data/config/command_modifiers.yaml +127 -0
  53. data/data/config/command_telemetry.yaml +3 -0
  54. data/data/config/data_viewer.yaml +43 -0
  55. data/data/config/handbook_creator.yaml +23 -0
  56. data/data/config/housekeeping_params.yaml +71 -0
  57. data/data/config/interface_modifiers.yaml +44 -0
  58. data/data/config/item_modifiers.yaml +172 -0
  59. data/data/config/launcher.yaml +117 -0
  60. data/data/config/limits_monitor.yaml +53 -0
  61. data/data/config/linegraph_params.yaml +30 -0
  62. data/data/config/linegraph_plot.yaml +106 -0
  63. data/data/config/page_modifiers.yaml +128 -0
  64. data/data/config/param_item_modifiers.yaml +41 -0
  65. data/data/config/parameter_modifiers.yaml +144 -0
  66. data/data/config/protocols.yaml +257 -0
  67. data/data/config/screen.yaml +151 -0
  68. data/data/config/script_runner.yaml +15 -0
  69. data/data/config/system.yaml +153 -0
  70. data/data/config/table_manager.yaml +76 -0
  71. data/data/config/table_parameter_modifiers.yaml +9 -0
  72. data/data/config/target.yaml +71 -0
  73. data/data/config/telemetry.yaml +73 -0
  74. data/data/config/telemetry_modifiers.yaml +129 -0
  75. data/data/config/test_runner.yaml +118 -0
  76. data/data/config/tlm_extractor.yaml +109 -0
  77. data/data/config/tlm_grapher.yaml +78 -0
  78. data/data/config/tlm_viewer.yaml +107 -0
  79. data/data/config/unknown.yaml +3 -0
  80. data/data/config/widgets.yaml +1339 -0
  81. data/data/config/xy_params.yaml +50 -0
  82. data/data/config/xy_plot.yaml +12 -0
  83. data/data/config_editor.png +0 -0
  84. data/data/crc.txt +172 -161
  85. data/data/delete.png +0 -0
  86. data/demo/config/data/crc.txt +56 -36
  87. data/demo/config/data/meta_init.txt +1 -4
  88. data/demo/config/system/system.txt +15 -3
  89. data/demo/config/system/system2.txt +13 -3
  90. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
  91. data/demo/config/targets/EXAMPLE/target.txt +3 -1
  92. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
  93. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  94. data/demo/config/targets/INST/screens/adcs.txt +39 -15
  95. data/demo/config/targets/INST/screens/commanding.txt +26 -19
  96. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  97. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  98. data/demo/config/targets/INST/screens/tabs.txt +0 -2
  99. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  100. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  101. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  102. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  103. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  104. data/demo/config/targets/INST/target.txt +4 -0
  105. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  106. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  107. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  108. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  109. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
  110. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  111. data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  112. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  113. data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  114. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
  115. data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
  116. data/demo/config/targets/SYSTEM/target.txt +12 -0
  117. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
  118. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
  119. data/demo/config/targets/TEMPLATED/target.txt +2 -0
  120. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
  121. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
  122. data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
  123. data/demo/config/tools/launcher/launcher.txt +9 -6
  124. data/demo/config/tools/launcher/launcher2.txt +16 -13
  125. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  126. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
  127. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
  128. data/demo/config/tools/test_runner/test_runner.txt +1 -1
  129. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  130. data/demo/lib/example_background_task.rb +9 -5
  131. data/demo/lib/example_target.rb +5 -15
  132. data/demo/lib/scpi_target.rb +4 -10
  133. data/demo/procedures/cosmos_api_test.rb +17 -0
  134. data/demo/tools/CmdSequence +16 -0
  135. data/demo/tools/CmdSequence.bat +9 -0
  136. data/demo/tools/ConfigEditor +16 -0
  137. data/demo/tools/ConfigEditor.bat +9 -0
  138. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  139. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  140. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  141. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  142. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  143. data/ext/cosmos/ext/packet/packet.c +5 -5
  144. data/install/config/data/crc.txt +12 -8
  145. data/install/config/system/system.txt +13 -3
  146. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
  147. data/install/config/targets/SYSTEM/target.txt +12 -0
  148. data/install/tools/CmdSequence +16 -0
  149. data/install/tools/CmdSequence.bat +9 -0
  150. data/install/tools/ConfigEditor +16 -0
  151. data/install/tools/ConfigEditor.bat +9 -0
  152. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  153. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  154. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  155. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  156. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  157. data/lib/cosmos.rb +1 -1
  158. data/lib/cosmos/config/config_parser.rb +147 -59
  159. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  160. data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
  161. data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
  162. data/lib/cosmos/core_ext/array.rb +45 -5
  163. data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
  164. data/lib/cosmos/core_ext/file.rb +2 -2
  165. data/lib/cosmos/core_ext/kernel.rb +1 -6
  166. data/lib/cosmos/core_ext/objectspace.rb +0 -2
  167. data/lib/cosmos/core_ext/string.rb +27 -4
  168. data/lib/cosmos/core_ext/time.rb +39 -10
  169. data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
  170. data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
  171. data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
  172. data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
  173. data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
  174. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
  175. data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
  176. data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
  177. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
  178. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
  179. data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
  180. data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
  181. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
  182. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  183. data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
  184. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
  185. data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
  186. data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
  187. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
  188. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
  189. data/lib/cosmos/gui/dialogs/splash.rb +1 -1
  190. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
  191. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
  192. data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
  193. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
  194. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
  195. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
  196. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
  197. data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
  198. data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
  199. data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
  200. data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
  201. data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
  202. data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
  203. data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
  204. data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
  205. data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
  206. data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
  207. data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
  208. data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
  209. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
  210. data/lib/cosmos/gui/qt.rb +1 -1
  211. data/lib/cosmos/gui/qt_tool.rb +21 -10
  212. data/lib/cosmos/gui/text/completion.rb +23 -2
  213. data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
  214. data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
  215. data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
  216. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
  217. data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
  218. data/lib/cosmos/interfaces.rb +10 -0
  219. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
  220. data/lib/cosmos/interfaces/interface.rb +240 -22
  221. data/lib/cosmos/interfaces/linc_interface.rb +3 -5
  222. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  223. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  224. data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
  225. data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
  226. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  227. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  228. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  229. data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
  230. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  231. data/lib/cosmos/interfaces/serial_interface.rb +28 -23
  232. data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
  233. data/lib/cosmos/interfaces/stream_interface.rb +36 -108
  234. data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
  235. data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
  236. data/lib/cosmos/interfaces/udp_interface.rb +51 -83
  237. data/lib/cosmos/io/buffered_file.rb +92 -2
  238. data/lib/cosmos/io/json_drb.rb +2 -2
  239. data/lib/cosmos/io/posix_serial_driver.rb +3 -1
  240. data/lib/cosmos/io/raw_logger.rb +3 -3
  241. data/lib/cosmos/io/serial_driver.rb +14 -5
  242. data/lib/cosmos/io/win32_serial_driver.rb +16 -4
  243. data/lib/cosmos/packet_logs.rb +0 -1
  244. data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
  245. data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
  246. data/lib/cosmos/packets/binary_accessor.rb +599 -32
  247. data/lib/cosmos/packets/commands.rb +48 -24
  248. data/lib/cosmos/packets/packet.rb +140 -54
  249. data/lib/cosmos/packets/packet_config.rb +0 -2
  250. data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
  251. data/lib/cosmos/packets/structure.rb +81 -33
  252. data/lib/cosmos/packets/structure_item.rb +45 -5
  253. data/lib/cosmos/packets/telemetry.rb +149 -55
  254. data/lib/cosmos/script/api_shared.rb +1000 -0
  255. data/lib/cosmos/script/commands.rb +2 -2
  256. data/lib/cosmos/script/extract.rb +19 -4
  257. data/lib/cosmos/script/limits.rb +2 -0
  258. data/lib/cosmos/script/script.rb +1 -1
  259. data/lib/cosmos/script/scripting.rb +4 -784
  260. data/lib/cosmos/script/telemetry.rb +44 -23
  261. data/lib/cosmos/script/tools.rb +15 -69
  262. data/lib/cosmos/streams/serial_stream.rb +12 -19
  263. data/lib/cosmos/streams/stream.rb +2 -11
  264. data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
  265. data/lib/cosmos/system/system.rb +187 -31
  266. data/lib/cosmos/system/target.rb +11 -2
  267. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
  268. data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
  269. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
  270. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  271. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  272. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  273. data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
  274. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
  275. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
  276. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
  277. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
  278. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
  279. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
  280. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
  281. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
  282. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
  283. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
  284. data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
  285. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
  286. data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
  287. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
  288. data/lib/cosmos/tools/launcher/launcher.rb +29 -12
  289. data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
  290. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
  291. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
  292. data/lib/cosmos/tools/replay/replay.rb +36 -20
  293. data/lib/cosmos/tools/replay/replay_server.rb +1 -1
  294. data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
  295. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
  296. data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
  297. data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
  298. data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
  299. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
  300. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
  301. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
  302. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
  303. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
  304. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
  305. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
  306. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
  307. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
  308. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
  309. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
  310. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
  311. data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
  312. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
  313. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
  314. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  315. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
  316. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
  317. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
  318. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
  320. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
  321. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
  322. data/lib/cosmos/top_level.rb +34 -24
  323. data/lib/cosmos/utilities/crc.rb +108 -6
  324. data/lib/cosmos/utilities/csv.rb +68 -14
  325. data/lib/cosmos/utilities/logger.rb +2 -2
  326. data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
  327. data/lib/cosmos/version.rb +6 -6
  328. data/lib/cosmos/win32/win32_main.rb +50 -46
  329. data/run_gui_tests.bat +3 -1
  330. data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
  331. data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
  332. data/spec/core_ext/file_spec.rb +1 -1
  333. data/spec/core_ext/objectspace_spec.rb +12 -9
  334. data/spec/core_ext/string_spec.rb +6 -0
  335. data/spec/core_ext/time_spec.rb +10 -0
  336. data/spec/gui/line_graph/line_clip_spec.rb +226 -224
  337. data/spec/gui/qt_spec.rb +81 -79
  338. data/spec/install/config/system/system.txt +0 -6
  339. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
  340. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
  341. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  342. data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  343. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  344. data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  345. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  346. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  347. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
  348. data/spec/interfaces/interface_spec.rb +402 -18
  349. data/spec/interfaces/linc_interface_spec.rb +37 -39
  350. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  351. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  352. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  353. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  354. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  355. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  356. data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
  357. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  358. data/spec/interfaces/serial_interface_spec.rb +35 -34
  359. data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
  360. data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
  361. data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
  362. data/spec/interfaces/udp_interface_spec.rb +120 -55
  363. data/spec/io/serial_driver_spec.rb +41 -39
  364. data/spec/io/udp_sockets_spec.rb +13 -8
  365. data/spec/io/win32_serial_driver_spec.rb +62 -59
  366. data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
  367. data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
  368. data/spec/packets/commands_spec.rb +5 -5
  369. data/spec/packets/packet_spec.rb +2 -14
  370. data/spec/script/extract_spec.rb +21 -7
  371. data/spec/script/scripting_spec.rb +261 -6
  372. data/spec/script/telemetry_spec.rb +17 -9
  373. data/spec/spec_helper.rb +26 -10
  374. data/spec/streams/serial_stream_spec.rb +87 -82
  375. data/spec/streams/tcpip_client_stream_spec.rb +12 -4
  376. data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
  377. data/spec/system/system_spec.rb +66 -50
  378. data/spec/system/target_spec.rb +33 -11
  379. data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
  380. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
  381. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
  382. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
  383. data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
  384. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
  385. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
  386. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  387. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
  388. data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
  389. data/spec/top_level/top_level_spec.rb +39 -11
  390. data/spec/utilities/csv_spec.rb +62 -20
  391. data/tasks/gemfile_stats.rake +6 -3
  392. data/test/performance/config/system/system_packets.txt +0 -1
  393. data/test/performance/config/system/system_threads.txt +0 -1
  394. metadata +177 -92
  395. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  396. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  397. data/autohotkey/config/targets/COSMOS/target.txt +0 -5
  398. data/autohotkey/userpath.txt +0 -1
  399. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  400. data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
  401. data/demo/config/targets/COSMOS/screens/version.txt +0 -19
  402. data/demo/config/targets/COSMOS/target.txt +0 -11
  403. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
  404. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
  405. data/demo/userpath.txt +0 -1
  406. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  407. data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  408. data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  409. data/install/config/targets/COSMOS/screens/version.txt +0 -19
  410. data/install/config/targets/COSMOS/target.txt +0 -9
  411. data/install/config/targets/SYSTEM/README.txt +0 -1
  412. data/install/userpath.txt +0 -1
  413. data/lib/cosmos/io/tcpip_server.rb +0 -571
  414. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
  415. data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
  416. data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
  417. data/lib/cosmos/streams/stream_protocol.rb +0 -373
  418. data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
  419. data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
  420. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
  421. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  422. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  423. data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
  424. data/spec/install/config/targets/COSMOS/target.txt +0 -5
  425. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
  426. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
  427. data/spec/install/userpath.txt +0 -1
  428. data/spec/interfaces/stream_interface_spec.rb +0 -157
  429. data/spec/io/tcpip_server_spec.rb +0 -338
  430. data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
  431. data/spec/streams/burst_stream_protocol_spec.rb +0 -32
  432. data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
  433. data/spec/streams/length_stream_protocol_spec.rb +0 -300
  434. data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
  435. data/spec/streams/stream_protocol_spec.rb +0 -346
  436. data/spec/streams/template_stream_protocol_spec.rb +0 -156
  437. data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
  438. data/test/performance/userpath.txt +0 -1
@@ -12,12 +12,7 @@ require 'cosmos'
12
12
  require 'cosmos/gui/choosers/value_chooser'
13
13
 
14
14
  module Cosmos
15
-
16
15
  class FloatChooserDoubleValidator < Qt::DoubleValidator
17
- def initialize(*args)
18
- super(*args)
19
- end
20
-
21
16
  def fixup(input)
22
17
  begin
23
18
  value = input.to_f
@@ -34,10 +29,17 @@ module Cosmos
34
29
  end
35
30
  end
36
31
 
32
+ # Widget which creates a horizontally laid out label and editable float value.
33
+ # Minimum and maximum values can be specified to perform input validation.
34
+ # A callback can be specified which is called once the value is changed.
37
35
  class FloatChooser < ValueChooser
38
- # Callback for a new value entered into the text field
39
- attr_accessor :sel_command_callback
40
-
36
+ # @param parent (see ValueChooser#initialize)
37
+ # @param label_text (see ValueChooser#initialize)
38
+ # @param initial_value (see ValueChooser#initialize)
39
+ # @param minimum_value [Float] Minimum allowable value
40
+ # @param maximum_value [Float] Maximum allowable value
41
+ # @param field_width (see ValueChooser#initialize)
42
+ # @param fill (see ValueChooser#initialize)
41
43
  def initialize(parent, label_text, initial_value,
42
44
  minimum_value = nil, maximum_value = nil,
43
45
  field_width = 20, fill = false)
@@ -52,14 +54,14 @@ module Cosmos
52
54
  @value.setValidator(validator)
53
55
  end
54
56
 
55
- # Returns the value as a float
57
+ # @return [Float] Value as a float. If minimum and/or maximum values were
58
+ # specified and the the value falls outside, it will be set to the
59
+ # minimum or maximum as appropriate.
56
60
  def value
57
61
  float_value = @value.text.to_f
58
62
  float_value = @minimum_value if @minimum_value && float_value < @minimum_value
59
63
  float_value = @maximum_value if @maximum_value && float_value > @maximum_value
60
64
  float_value
61
65
  end
62
-
63
66
  end
64
67
  end
65
-
@@ -12,12 +12,7 @@ require 'cosmos'
12
12
  require 'cosmos/gui/choosers/value_chooser'
13
13
 
14
14
  module Cosmos
15
-
16
15
  class IntegerChooserIntValidator < Qt::IntValidator
17
- def initialize(*args)
18
- super(*args)
19
- end
20
-
21
16
  def fixup(input)
22
17
  begin
23
18
  value = input.to_i
@@ -37,10 +32,17 @@ module Cosmos
37
32
  end
38
33
  end
39
34
 
35
+ # Widget which creates a horizontally laid out label and editable integer value.
36
+ # Minimum and maximum values can be specified to perform input validation.
37
+ # A callback can be specified which is called once the value is changed.
40
38
  class IntegerChooser < ValueChooser
41
- # Callback called when the value changes
42
- attr_accessor :sel_command_callback
43
-
39
+ # @param parent (see ValueChooser#initialize)
40
+ # @param label_text (see ValueChooser#initialize)
41
+ # @param initial_value (see ValueChooser#initialize)
42
+ # @param minimum_value [Integer] Minimum allowable value
43
+ # @param maximum_value [Integer] Maximum allowable value
44
+ # @param field_width (see ValueChooser#initialize)
45
+ # @param fill (see ValueChooser#initialize)
44
46
  def initialize(parent, label_text, initial_value,
45
47
  minimum_value = nil, maximum_value = nil,
46
48
  field_width = 20, fill = false)
@@ -54,14 +56,14 @@ module Cosmos
54
56
  @value.setValidator(validator)
55
57
  end
56
58
 
57
- # Returns the value as an integer
59
+ # @return [Integer] Value as an integer. If minimum and/or maximum values were
60
+ # specified and the the value falls outside, it will be set to the
61
+ # minimum or maximum as appropriate.
58
62
  def value
59
63
  integer_value = @value.text.to_i
60
64
  integer_value = @minimum_value if @minimum_value && integer_value < @minimum_value
61
65
  integer_value = @maximum_value if @maximum_value && integer_value > @maximum_value
62
66
  integer_value
63
67
  end
64
-
65
68
  end
66
69
  end
67
-
@@ -9,45 +9,27 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  require 'cosmos'
12
+ require 'cosmos/gui/choosers/value_chooser'
12
13
 
13
14
  module Cosmos
14
-
15
- class StringChooser < Qt::Widget
16
-
15
+ # Widget which creates a horizontally laid out label and editable string value.
16
+ # A callback can be specified which is called once the value is changed.
17
+ class StringChooser < ValueChooser
18
+ # @param parent (see ValueChooser#initialize)
19
+ # @param label_text (see ValueChooser#initialize)
20
+ # @param initial_value (see ValueChooser#initialize)
21
+ # @param field_width (see ValueChooser#initialize)
22
+ # @param fill (see ValueChooser#initialize)
23
+ # @param read_only [Boolean] Whether the string is editable
24
+ # @param alignment [Integer] The alignment of the string value field
17
25
  def initialize(
18
26
  parent, label_text, initial_value,
19
- field_width = 20, fill = false, read_only = false, alignment = Qt::AlignLeft | Qt::AlignVCenter
27
+ field_width = 20, fill = false, read_only = false,
28
+ alignment = Qt::AlignLeft | Qt::AlignVCenter
20
29
  )
21
- super(parent)
22
- layout = Qt::HBoxLayout.new(self)
23
- layout.setContentsMargins(0,0,0,0)
24
- @string_label = Qt::Label.new(label_text)
25
- @string_label.setSizePolicy(Qt::SizePolicy::Fixed, Qt::SizePolicy::Fixed) if fill
26
- if fill
27
- layout.addWidget(@string_label)
28
- else
29
- layout.addWidget(@string_label, 1)
30
- end
31
- layout.addStretch unless fill
32
- @string_value = Qt::LineEdit.new(initial_value.to_s)
33
- @string_value.setMinimumWidth(field_width)
34
- @string_value.setReadOnly(true) if read_only
35
- @string_value.setAlignment(alignment)
36
- layout.addWidget(@string_value)
37
- setLayout(layout)
38
- end
39
-
40
- # Returns the text field as a string
41
- def string
42
- @string_value.text
30
+ super(parent, label_text, initial_value, field_width, fill)
31
+ @value.setReadOnly(true) if read_only
32
+ @value.setAlignment(alignment)
43
33
  end
44
- alias value string
45
-
46
- # Sets the value
47
- def value=(new_value)
48
- @string_value.setText(new_value.to_s)
49
- end
50
-
51
- end # class StringChooser
52
-
53
- end # module Cosmos
34
+ end
35
+ end
@@ -13,13 +13,11 @@ require 'cosmos/gui/qt'
13
13
  require 'cosmos/system/system'
14
14
 
15
15
  module Cosmos
16
-
17
16
  # Provides dropdowns to select from all the defined Targets, Packets, and
18
17
  # Items. Callbacks can be added when any of the dropdown values are changed
19
18
  # as well as when the select button is pressed. Provides an option to orient
20
19
  # the dropdowns horizontally or vertically.
21
20
  class TelemetryChooser < Qt::Widget
22
-
23
21
  # Width of the button in the Combobox
24
22
  COMBOBOX_BUTTON_WIDTH = 30
25
23
 
@@ -44,6 +42,14 @@ module Cosmos
44
42
  # Label for the item
45
43
  attr_accessor :item_label
46
44
 
45
+ # Custom error which we raise and catch
46
+ class NotFoundError < StandardError
47
+ # @param msg [String] The error message
48
+ def initialize(msg)
49
+ super(msg)
50
+ end
51
+ end
52
+
47
53
  # @param parent [Qt::Widget] Parent of this widget
48
54
  # @param orientation [Integer] Must be Qt::Horizontal or Qt::Vertical
49
55
  # @param choose_item [Boolean] Whether to allow choosing items. Choosing
@@ -52,6 +58,8 @@ module Cosmos
52
58
  # You can disable the button if you just want to implement the dropdown
53
59
  # change callbacks.
54
60
  # @param support_latest [Boolean] Whether to add LATEST to the list of packets
61
+ # @param fill [Boolean] Whether to allow this widget to take all available
62
+ # space or have a fixed width/height
55
63
  def initialize(
56
64
  parent,
57
65
  orientation = Qt::Horizontal,
@@ -60,7 +68,6 @@ module Cosmos
60
68
  support_latest = false,
61
69
  fill = false
62
70
  )
63
-
64
71
  super(parent)
65
72
  if orientation == Qt::Horizontal
66
73
  # Horizontal Frame for overall widget
@@ -69,7 +76,7 @@ module Cosmos
69
76
  # Vertical Frame for overall widget
70
77
  @overall_frame = Qt::VBoxLayout.new(self)
71
78
  end
72
- @overall_frame.setContentsMargins(0,0,0,0)
79
+ @overall_frame.setContentsMargins(0, 0, 0, 0)
73
80
 
74
81
  # Target Selection
75
82
  @target_layout = Qt::HBoxLayout.new
@@ -120,8 +127,6 @@ module Cosmos
120
127
  end
121
128
 
122
129
  if select_button
123
- # Select Button
124
- #@overall_frame.addStretch()
125
130
  @select_button = Qt::PushButton.new('Select')
126
131
  @select_button.connect(SIGNAL('clicked()')) do
127
132
  @select_button_callback.call(target_name(), packet_name(), item_name()) if @select_button_callback
@@ -137,118 +142,117 @@ module Cosmos
137
142
  @support_latest = support_latest
138
143
  end
139
144
 
140
- # Update items
145
+ # Update all items in all comboboxes. If a previous item was selected that
146
+ # item will be reselected if it still exists.
141
147
  def update
142
148
  current_target_name = target_name()
143
149
  current_packet_name = packet_name()
144
150
  current_item_name = item_name()
145
151
  update_targets()
146
- if current_target_name and current_packet_name and (current_item_name or !@item_combobox)
152
+ if current_target_name && current_packet_name && (current_item_name || !@item_combobox)
147
153
  begin
148
154
  set_item(current_target_name, current_packet_name, current_item_name)
149
- rescue Exception
155
+ rescue NotFoundError
150
156
  # Oh well - Tried to keep the same item
151
157
  end
152
158
  end
153
159
  end
154
160
 
155
- # Set the text of the button
156
- def button_text=(button_text)
157
- @select_button.setText(button_text)
161
+ # @param text [String] Select button text
162
+ def button_text=(text)
163
+ @select_button.setText(text)
158
164
  end
159
165
 
160
- # Returns the selected target name
166
+ # @return [String] Selected target name
161
167
  def target_name
162
168
  @target_combobox.text
163
169
  end
164
170
 
165
- # Returns the selected packet name
171
+ # @return [String] Selected packet name
166
172
  def packet_name
167
173
  @packet_combobox.text
168
174
  end
169
175
 
170
- # Returns the selected item name
176
+ # @return [String] Selected item name
171
177
  def item_name
172
- if @item_combobox
173
- @item_combobox.text
174
- else
175
- nil
176
- end
178
+ @item_combobox ? @item_combobox.text : nil
177
179
  end
178
180
 
179
- # Returns the list of all target names in the target combobox
181
+ # @return [Array<String>] List of all target names in the target combobox
180
182
  def target_names
181
183
  target_names_array = []
182
- @target_combobox.each {|item_text, item_data| target_names_array << item_text}
184
+ @target_combobox.each {|item_text, _item_data| target_names_array << item_text}
183
185
  target_names_array
184
186
  end
185
187
 
186
- # Returns the list of all packet names in the packet combobox
188
+ # @return [Array<String>] List of all packet names in the packet combobox
187
189
  def packet_names
188
190
  packet_names_array = []
189
- @packet_combobox.each {|item_text, item_data| packet_names_array << item_text}
191
+ @packet_combobox.each {|item_text, _item_data| packet_names_array << item_text}
190
192
  packet_names_array
191
193
  end
192
194
 
193
- # Returns the list of all item names in the item combobox
195
+ # @return [Array<String>] List of all item names in the item combobox
194
196
  def item_names
195
197
  item_names_array = []
196
198
  if @item_combobox
197
- @item_combobox.each {|item_text, item_data| item_names_array << item_text}
199
+ @item_combobox.each {|item_text, _item_data| item_names_array << item_text}
198
200
  end
199
201
  item_names_array
200
202
  end
201
203
 
202
- # Sets the current packet
204
+ # Sets the packet combobox
205
+ # @param target_name [String] Name of the target
206
+ # @param packet_name [String] Name of the packet
203
207
  def set_packet(target_name, packet_name)
204
208
  # Select desired target
205
209
  index = 0
206
210
  found = false
207
- @target_combobox.each do |item_text, item_data|
208
- if target_name.upcase == item_text.upcase
211
+ @target_combobox.each do |item_text, _item_data|
212
+ if target_name.casecmp(item_text).zero?
209
213
  found = true
210
214
  break
211
215
  end
212
216
  index += 1
213
217
  end
214
- Kernel.raise "TelemetryChooser unknown target_name #{target_name}" unless found
218
+ raise NotFoundError, "TelemetryChooser unknown target_name #{target_name}" unless found
215
219
  @target_combobox.setCurrentIndex(index)
216
220
  update_packets()
217
221
 
218
222
  # Select desired packet
219
223
  index = 0
220
224
  found = false
221
- @packet_combobox.each do |item_text, item_data|
222
- if packet_name.upcase == item_text.upcase
225
+ @packet_combobox.each do |item_text, _item_data|
226
+ if packet_name.casecmp(item_text).zero?
223
227
  found = true
224
228
  break
225
229
  end
226
230
  index += 1
227
231
  end
228
- Kernel.raise "TelemetryChooser unknown packet_name #{packet_name}" unless found
232
+ raise NotFoundError, "TelemetryChooser unknown packet_name #{packet_name}" unless found
229
233
  @packet_combobox.setCurrentIndex(index)
230
234
  update_items()
231
235
  end
232
236
 
233
- # Sets the current item
237
+ # Sets the item combobox
238
+ # @param target_name [String] Name of the target
239
+ # @param packet_name [String] Name of the packet
240
+ # @param item_name [String] Name of the item
234
241
  def set_item(target_name, packet_name, item_name)
235
- # Set the desired packet
236
242
  set_packet(target_name, packet_name)
243
+ return unless @item_combobox
237
244
 
238
- # Select desired item
239
- if @item_combobox
240
- index = 0
241
- found = false
242
- @item_combobox.each do |item_text, item_data|
243
- if item_name.upcase == item_text.upcase
244
- found = true
245
- break
246
- end
247
- index += 1
245
+ index = 0
246
+ found = false
247
+ @item_combobox.each do |item_text, _item_data|
248
+ if item_name.casecmp(item_text).zero?
249
+ found = true
250
+ break
248
251
  end
249
- Kernel.raise "TelemetryChooser unknown item_name #{item_name}" unless found
250
- @item_combobox.setCurrentIndex(index)
252
+ index += 1
251
253
  end
254
+ raise NotFoundError, "TelemetryChooser unknown item_name #{item_name}" unless found
255
+ @item_combobox.setCurrentIndex(index)
252
256
  end
253
257
 
254
258
  protected
@@ -305,22 +309,18 @@ module Cosmos
305
309
 
306
310
  # Updates the item names based on a change
307
311
  def update_items
308
- return unless target_name() and packet_name()
309
- if @item_combobox
310
- @item_combobox.clearItems()
311
- item_names = System.telemetry.item_names(target_name(), packet_name())
312
- item_names.sort!
313
- item_names.each do |name|
314
- @item_combobox.addItem(name)
315
- end
316
- if item_names.length > 20
317
- @item_combobox.setMaxVisibleItems(20)
318
- else
319
- @item_combobox.setMaxVisibleItems(item_names.length)
320
- end
312
+ return unless target_name() && packet_name() && @item_combobox
313
+ @item_combobox.clearItems()
314
+ item_names = System.telemetry.item_names(target_name(), packet_name())
315
+ item_names.sort!
316
+ item_names.each do |name|
317
+ @item_combobox.addItem(name)
318
+ end
319
+ if item_names.length > 20
320
+ @item_combobox.setMaxVisibleItems(20)
321
+ else
322
+ @item_combobox.setMaxVisibleItems(item_names.length)
321
323
  end
322
324
  end
323
-
324
- end # class TelemetryChooser
325
-
326
- end # module Cosmos
325
+ end
326
+ end
@@ -11,18 +11,24 @@
11
11
  require 'cosmos'
12
12
 
13
13
  module Cosmos
14
-
14
+ # Widget which creates a horizontally laid out label and editable value.
15
+ # A callback can be specified which is called once the value is changed.
15
16
  class ValueChooser < Qt::Widget
16
-
17
17
  # Callback for a new value entered into the text field
18
18
  attr_accessor :sel_command_callback
19
19
 
20
+ # @param parent [Qt::Widget] Widget to parent this widget to
21
+ # @param label_text [String] Text to place in the label
22
+ # @param initial_value [String] Initial value to put in the value box
23
+ # @param field_width [Integer] Minimum width of the value field
24
+ # @param fill [Boolean] Whether to make this widget fill up the horizontal
25
+ # space allocated to it or be fixed width.
20
26
  def initialize(parent, label_text, initial_value, field_width = 20, fill = false)
21
27
  super(parent)
22
28
  @field_width = field_width
23
29
 
24
30
  layout = Qt::HBoxLayout.new(self)
25
- layout.setContentsMargins(0,0,0,0)
31
+ layout.setContentsMargins(0, 0, 0, 0)
26
32
 
27
33
  @label = Qt::Label.new(label_text)
28
34
  @label.setSizePolicy(Qt::SizePolicy::Fixed, Qt::SizePolicy::Fixed) if fill
@@ -47,21 +53,15 @@ module Cosmos
47
53
  @sel_command_callback = nil
48
54
  end
49
55
 
50
- # Returns the value as a string
51
- def string
52
- @value.text
53
- end
54
-
55
- # Returns the value as a string
56
+ # @return [String] The value as a string
56
57
  def value
57
- string()
58
+ @value.text
58
59
  end
60
+ alias string value
59
61
 
60
- # Sets the value of the text field
61
- def value=(new_value)
62
- @value.setText(new_value.to_s)
62
+ # @param value [#to_s] String to set the value to
63
+ def value=(value)
64
+ @value.setText(value.to_s)
63
65
  end
64
-
65
66
  end
66
67
  end
67
-