cosmos 3.9.2 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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