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
@@ -8,7 +8,7 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'cosmos/ext/array'
11
+ require 'cosmos/ext/array' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
12
12
 
13
13
  # COSMOS specific additions to the Ruby Array class
14
14
  class Array
@@ -229,11 +229,51 @@ class Array
229
229
  self.map {|value| value * value}
230
230
  end
231
231
 
232
- # return [Numeric, Fixnum] The first maximum value and its index
233
- # def max_with_index
232
+ if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
233
+ # return [Numeric, Fixnum] The first maximum value and its index
234
+ def max_with_index
235
+ maximum = nil
236
+ maximum_index = nil
234
237
 
235
- # return [Numeric, Fixnum] The first minimum value and its index
236
- # def min_with_index
238
+ if self.length > 0
239
+ maximum = self[0]
240
+ maximum_index = 0
241
+
242
+ (1..(self.length - 1)).each do |index|
243
+ value = self[index]
244
+
245
+ if value > maximum
246
+ maximum = value
247
+ maximum_index = index
248
+ end
249
+ end
250
+ end
251
+
252
+ return [maximum, maximum_index]
253
+ end
254
+
255
+ # return [Numeric, Fixnum] The first minimum value and its index
256
+ def min_with_index
257
+ minimum = nil
258
+ minimum_index = nil
259
+
260
+ if self.length > 0
261
+ minimum = self[0]
262
+ minimum_index = 0
263
+
264
+ (1..(self.length - 1)).each do |index|
265
+ value = self[index]
266
+
267
+ if value < minimum
268
+ minimum = value
269
+ minimum_index = index
270
+ end
271
+ end
272
+ end
273
+
274
+ return [minimum, minimum_index]
275
+ end
276
+ end
237
277
 
238
278
  # @param num_buckets [Integer] The number of buckets (groups of numbers) that
239
279
  # will be used when histogramming. nil indicates to use as many buckets as
@@ -8,22 +8,38 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'cosmos/ext/cosmos_io'
11
+ require 'cosmos/packets/binary_accessor'
12
+ require 'cosmos/ext/cosmos_io' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
12
13
 
13
14
  # COSMOS specific additions to the Ruby IO and StringIO classes
14
15
  module CosmosIO
15
- # Reads a length field and then return the String resulting from reading the
16
- # number of bytes the length field indicates
17
- #
18
- # For example:
19
- # io = StringIO.new
20
- # # where io is "\x02\x01\x02\x03\x04...."
21
- # result = io.read_length_bytes(1)
22
- # # result will be "\x01x02" because the length field was given
23
- # # to be 1 byte. We read 1 byte which is a 2. So we then read two
24
- # # bytes and return.
25
- #
26
- # @param length_num_bytes [Integer] Number of bytes in the length field
27
- # @return [String] A String of "length field" number of bytes
28
- # def read_length_bytes(length_num_bytes)
16
+ if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
17
+ # Reads a length field and then return the String resulting from reading the
18
+ # number of bytes the length field indicates
19
+ #
20
+ # For example:
21
+ # io = StringIO.new
22
+ # # where io is "\x02\x01\x02\x03\x04...."
23
+ # result = io.read_length_bytes(1)
24
+ # # result will be "\x01x02" because the length field was given
25
+ # # to be 1 byte. We read 1 byte which is a 2. So we then read two
26
+ # # bytes and return.
27
+ #
28
+ # @param length_num_bytes [Integer] Number of bytes in the length field
29
+ # @return [String] A String of "length field" number of bytes
30
+ def read_length_bytes(length_num_bytes)
31
+ return nil unless (length_num_bytes == 1) || (length_num_bytes == 2) or (length_num_bytes == 4)
32
+
33
+ # Read bytes for string length
34
+ temp_string_length = self.read(length_num_bytes)
35
+ return nil if (temp_string_length.nil?) || (temp_string_length.length != length_num_bytes)
36
+ string_length = Cosmos::BinaryAccessor.read(0, length_num_bytes * 8, :UINT, temp_string_length, :BIG_ENDIAN)
37
+
38
+ # Read String
39
+ string = self.read(string_length)
40
+ return nil if (string.nil?) || (string.length != string_length)
41
+ return string
42
+ end
43
+ end
44
+
29
45
  end
@@ -34,7 +34,7 @@ class File
34
34
  # the date before appending the extension.
35
35
  #
36
36
  # For example:
37
- # File.build_timestamped_filename(['test','only'], '.bin', Time.now)
37
+ # File.build_timestamped_filename(['test','only'], '.bin', Time.now.sys)
38
38
  # # result is YYYY_MM_DD_HH_MM_SS_test_only.bin
39
39
  #
40
40
  # @param tags [Array<String>] An array of strings to be joined by underscores
@@ -43,7 +43,7 @@ class File
43
43
  # @param time [Time] The time to format into the filename
44
44
  # @return [String] The filename string containing the timestamp, tags, and
45
45
  # extension
46
- def self.build_timestamped_filename(tags = nil, extension = '.txt', time = Time.now)
46
+ def self.build_timestamped_filename(tags = nil, extension = '.txt', time = Time.now.sys)
47
47
  timestamp = sprintf("%04u_%02u_%02u_%02u_%02u_%02u", time.year, time.month, time.mday, time.hour, time.min, time.sec)
48
48
  tags ||= []
49
49
  tags.compact!
@@ -12,12 +12,7 @@
12
12
  module Kernel
13
13
  # @return [Boolean] Whether the current platform is Windows
14
14
  def is_windows?
15
- _, platform, *_ = RUBY_PLATFORM.split("-")
16
- result = false
17
- if platform == 'mswin32' or platform == 'mingw32'
18
- result = true
19
- end
20
- return result
15
+ Gem.win_platform?
21
16
  end
22
17
 
23
18
  # @return [Boolean] Whether the current platform is Mac
@@ -8,8 +8,6 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'cosmos/ext/array'
12
-
13
11
  # COSMOS specific additions to the ObjectSpace class
14
12
  module ObjectSpace
15
13
  def self.find(klass)
@@ -9,13 +9,15 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  require 'cosmos/packets/binary_accessor'
12
- require 'cosmos/ext/string'
12
+ require 'cosmos/ext/string' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
13
13
 
14
14
  # COSMOS specific additions to the Ruby String class
15
15
  class String
16
16
 
17
17
  # The printable range of ASCII characters
18
18
  PRINTABLE_RANGE = 32..126
19
+ # Regular expression to identify a character that is not in the printable range
20
+ NON_PRINTABLE_REGEX = /[^ -~]/
19
21
  # Regular expression to identify a String as a floating point number
20
22
  FLOAT_CHECK_REGEX = /\A\s*[-+]?\d*\.\d+\s*\z/
21
23
  # Regular expression to identify a String as a floating point number in
@@ -161,8 +163,17 @@ class String
161
163
  value
162
164
  end
163
165
 
164
- # @return [String] The string with leading and trailing quotes removed
165
- # def remove_quotes
166
+ if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
167
+ # @return [String] The string with leading and trailing quotes removed
168
+ def remove_quotes
169
+ return self if self.length < 2
170
+ first_char = self[0]
171
+ return self if (first_char != '"') && (first_char != "'")
172
+ last_char = self[-1]
173
+ return self if first_char != last_char
174
+ return self[1..-2]
175
+ end
176
+ end
166
177
 
167
178
  # @return [Boolean] Whether the String represents a floating point number
168
179
  def is_float?
@@ -184,6 +195,11 @@ class String
184
195
  if self =~ ARRAY_CHECK_REGEX then true else false end
185
196
  end
186
197
 
198
+ # @return [Boolean] Whether the string contains only printable characters
199
+ def is_printable?
200
+ if self =~ NON_PRINTABLE_REGEX then false else true end
201
+ end
202
+
187
203
  # @return Converts the String into either a Float, Integer, or Array
188
204
  # depending on what the String represents. It can successfully convert
189
205
  # floating point numbers in both fixed and scientific notation, integers
@@ -192,7 +208,14 @@ class String
192
208
  def convert_to_value
193
209
  return_value = self
194
210
  begin
195
- if self.is_float?
211
+ upcase_self = self.upcase
212
+ if upcase_self == 'INFINITY'.freeze
213
+ return_value = Float::INFINITY
214
+ elsif upcase_self == '-INFINITY'.freeze
215
+ return_value = -Float::INFINITY
216
+ elsif upcase_self == 'NAN'.freeze
217
+ return_value = Float::NAN
218
+ elsif self.is_float?
196
219
  # Floating Point in normal or scientific notation
197
220
  return_value = self.to_f
198
221
  elsif self.is_int?
@@ -68,6 +68,32 @@ class Time
68
68
  USEC_PER_DAY_FLOAT = USEC_PER_DAY.to_f
69
69
  MINUTES_PER_DAY_FLOAT = MINUTES_PER_DAY.to_f
70
70
 
71
+ # Class variable that allows us to globally select whether to use
72
+ # UTC or local time.
73
+ @@use_utc = false
74
+
75
+ # Set up the Time class so that a call to the sys method will set the
76
+ # Time object being operated upon to be a UTC time.
77
+ def self.use_utc
78
+ @@use_utc = true
79
+ end
80
+
81
+ # Set up the Time class so that a call to the sys method will set the
82
+ # Time object being operated upon to be a local time.
83
+ def self.use_local
84
+ @@use_utc = false
85
+ end
86
+
87
+ # Set the Time object to be either a UTC or local time depending on the
88
+ # use_utc flag.
89
+ def sys
90
+ if @@use_utc
91
+ self.utc
92
+ else
93
+ self.localtime
94
+ end
95
+ end
96
+
71
97
  # @param seconds [Numeric] Total number of seconds
72
98
  # @return [String] Seconds formatted as a human readable string with days,
73
99
  # hours, minutes, and seconds.
@@ -209,17 +235,20 @@ class Time
209
235
  Time.total_seconds(self.hour, self.min, self.sec, self.usec)
210
236
  end
211
237
 
212
- # @return [String] Date formatted as YYYY/MM/DD HH:MM:SS.US
213
- def formatted(include_year = true, fractional_digits = 3)
214
- if include_year && fractional_digits > 0
215
- self.strftime("%Y/%m/%d %H:%M:%S.%#{fractional_digits}N")
216
- elsif include_year && fractional_digits == 0
217
- self.strftime("%Y/%m/%d %H:%M:%S")
218
- elsif fractional_digits > 0 # no year
219
- self.strftime("%H:%M:%S.%#{fractional_digits}N")
220
- else # no year and no fractional digits
221
- self.strftime("%H:%M:%S")
238
+ # @return [String] Date formatted as YYYY/MM/DD HH:MM:SS.US UTC_OFFSET
239
+ def formatted(include_year = true, fractional_digits = 3, include_utc_offset = false)
240
+ str = ""
241
+ str << "%Y/%m/%d " if include_year
242
+ str << "%H:%M:%S"
243
+ str << ".%#{fractional_digits}N" if fractional_digits > 0
244
+ if include_utc_offset
245
+ if self.utc?
246
+ str << " UTC"
247
+ else
248
+ str << " %z"
249
+ end
222
250
  end
251
+ self.strftime(str)
223
252
  end
224
253
 
225
254
  # @param time [Time]
@@ -11,29 +11,36 @@
11
11
  require 'cosmos'
12
12
 
13
13
  module Cosmos
14
-
15
- # This class implements the ComboboxChooser
14
+ # Widget which creates a horizontally laid out label, and combobox.
15
+ # A callback can be specified which is called once the combobox is changed.
16
16
  class ComboboxChooser < Qt::Widget
17
-
18
17
  # Width of the button in the combobox
19
18
  COMBOBOX_BUTTON_WIDTH = 30
20
-
21
19
  # Optional callback for when the combobox value changes
22
20
  attr_accessor :sel_command_callback
23
21
 
22
+ # @param parent [Qt::Widget] Widget to parent this widget to
23
+ # @param label_text [String] Text to place in the label
24
+ # @param items [Array<#to_s>] Array of items to add to the combobox
25
+ # @param allow_user_entry [Boolean] Whether to allow the user to enter an
26
+ # arbitrary string in the combobox
27
+ # @param compact_combobox [Boolean] Whether to fix the size of the combobox
28
+ # or let it expand to fill the space
29
+ # @param color_chooser [Boolean] Whether to create a rectangular color
30
+ # swatch based on each item name
24
31
  def initialize(
25
32
  parent, label_text, items, # required
26
33
  allow_user_entry: false, compact_combobox: true, color_chooser: false
27
34
  )
28
35
  super(parent)
29
36
  layout = Qt::HBoxLayout.new(self)
30
- layout.setContentsMargins(0,0,0,0)
37
+ layout.setContentsMargins(0, 0, 0, 0)
31
38
  @combo_label = Qt::Label.new(label_text)
32
39
  @combo_label.setSizePolicy(Qt::SizePolicy::Fixed, Qt::SizePolicy::Fixed) unless compact_combobox
33
40
  layout.addWidget(@combo_label)
34
41
  @combo_value = Qt::ComboBox.new
35
42
  @combo_value.setEditable(allow_user_entry)
36
- string_items = items.map {|item| item.to_s}
43
+ string_items = items.map {|item| item.to_s }
37
44
  @combo_value.addItems(string_items)
38
45
  @color_chooser = color_chooser
39
46
  set_colors(string_items) if @color_chooser
@@ -50,11 +57,15 @@ module Cosmos
50
57
  @sel_command_callback = nil
51
58
  end
52
59
 
53
- # Changes the items in the combobox and resizes it
60
+ # Clears the combobox and adds new items
61
+ # @param items [Array<String>] Items to add to the combobox
62
+ # @param include_blank [Boolean] Whether to add a blank item as the first
63
+ # combobox item. This is typically done to indicate to the user that a
64
+ # value must be selected.
54
65
  def update_items(items, include_blank = true)
55
66
  @combo_value.clearItems
56
67
  @combo_value.addItem(' ') if include_blank
57
- string_items = items.map {|item| item.to_s}
68
+ string_items = items.map {|item| item.to_s }
58
69
  @combo_value.addItems(string_items)
59
70
  set_colors(string_items) if @color_chooser
60
71
  if items.length < 20
@@ -64,40 +75,42 @@ module Cosmos
64
75
  end
65
76
  end
66
77
 
67
- def set_current(string)
68
- @combo_value.setCurrentText(string.to_s)
69
- end
70
-
71
- # Supports a callback on item changing
72
- def handle_combobox_sel_command(index)
73
- if index >= 0
74
- @sel_command_callback.call(string()) if @sel_command_callback
75
- end
76
- 0
78
+ # @param text [String] Text to set in the current combobox item
79
+ def set_current(text)
80
+ @combo_value.setCurrentText(text.to_s)
77
81
  end
78
82
 
79
- # Returns the selected item as an integer
83
+ # @return [Integer] Current item as an integer
80
84
  def integer
81
85
  Integer(@combo_value.currentText)
82
86
  end
83
87
 
84
- # Returns the selected item as a float
88
+ # @return [Float] Current item as a float
85
89
  def float
86
90
  @combo_value.currentText.to_f if @combo_value.currentText
87
91
  end
88
92
 
89
- # Returns the selected item as a string
93
+ # @return [String] Current item as a string
90
94
  def string
91
95
  @combo_value.currentText
92
96
  end
93
97
 
94
- # Returns the selected item as a symbol
98
+ # @return [Symbol] Current item as a symbol
95
99
  def symbol
96
100
  @combo_value.currentText.intern if @combo_value.currentText
97
101
  end
98
102
 
99
103
  protected
100
104
 
105
+ # Calls the combobox selection changed callback if it exists
106
+ def handle_combobox_sel_command(index)
107
+ if index >= 0
108
+ @sel_command_callback.call(string()) if @sel_command_callback
109
+ end
110
+ 0
111
+ end
112
+
113
+ # Creates a rectangle of color based on the combobox item name
101
114
  def set_colors(string_items)
102
115
  # Create an image we can draw into
103
116
  img = Qt::Image.new(16, 16, Qt::Image::Format_RGB32)
@@ -124,7 +137,5 @@ module Cosmos
124
137
  img.dispose
125
138
  p.dispose
126
139
  end
127
-
128
- end # class ComboboxChooser
129
-
130
- end # module Cosmos
140
+ end
141
+ end
@@ -11,12 +11,29 @@
11
11
  require 'cosmos'
12
12
 
13
13
  module Cosmos
14
-
14
+ # Widget which creates a horizontally laid out label, value, and button that
15
+ # opens a FileDialog to choose a file. A callback can be specified which is
16
+ # called once the file is selected by the FileDialog.
15
17
  class FileChooser < Qt::Widget
16
-
17
18
  # Callback for a chosen filename
18
19
  attr_accessor :callback
19
20
 
21
+ # @param parent [Qt::Widget] Widget to parent this widget to
22
+ # @param label_text [String] Text to place in the label
23
+ # @param initial_value [String] Initial value to put in the value box. Note
24
+ # this has no impact on the FileDialog.
25
+ # @param button_text [String] Text to place on the button which launches
26
+ # the FileDialog
27
+ # @param file_path [String] Default path which is used when initially
28
+ # opening the FileDialog
29
+ # @param field_width [Integer] Minimum width of the value field
30
+ # @param fill [Boolean] Whether to make this widget fill up the horizontal
31
+ # space allocated to it or be fixed width.
32
+ # @param extensions [String] List of file filters which can be selected by
33
+ # the user. Must be formatted with the filter name followed by the
34
+ # extension in parens. Multiple filters must be separated by double
35
+ # semicolons. For example:
36
+ # "Images (*.png *.jpg);;Text files (*.txt)"
20
37
  def initialize(
21
38
  parent, label_text, initial_value, button_text, file_path,
22
39
  field_width = 20, fill = false, extensions = nil
@@ -55,14 +72,14 @@ module Cosmos
55
72
  @callback = nil
56
73
  end
57
74
 
75
+ # @return [String] The selected filename
58
76
  def filename
59
77
  @filename_value.text
60
78
  end
61
79
 
80
+ # @param filename [String] Filename to set the value to
62
81
  def filename=(filename)
63
82
  @filename_value.text = filename.to_s
64
83
  end
65
-
66
- end # class FloatChooser
67
-
68
- end # module Cosmos
84
+ end
85
+ end