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.
- checksums.yaml +4 -4
- data/.rubocop.yml +23 -0
- data/.travis.yml +1 -0
- data/.yardopts +3 -0
- data/Gemfile +1 -1
- data/Manifest.txt +137 -52
- data/Rakefile +50 -44
- data/autohotkey/config/system/system.txt +0 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
- data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
- data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
- data/autohotkey/config/targets/META/screens/data.txt +12 -0
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
- data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
- data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/tools/CmdSequence +14 -0
- data/autohotkey/tools/CmdSequenceAHK +23 -0
- data/autohotkey/tools/CmdSequenceAHK2 +16 -0
- data/autohotkey/tools/cmd_extractor.ahk +2 -2
- data/autohotkey/tools/cmd_sender.ahk +4 -6
- data/autohotkey/tools/cmd_sequence.ahk +215 -0
- data/autohotkey/tools/cmd_sequence2.ahk +23 -0
- data/autohotkey/tools/data_viewer.ahk +2 -3
- data/autohotkey/tools/limits_monitor.ahk +9 -11
- data/autohotkey/tools/open_gl_builder.ahk +1 -2
- data/autohotkey/tools/packet_viewer.ahk +51 -35
- data/autohotkey/tools/replay.ahk +1 -2
- data/autohotkey/tools/script_runner.ahk +1 -2
- data/autohotkey/tools/script_runner2.ahk +1 -2
- data/autohotkey/tools/test_runner2.ahk +1 -5
- data/autohotkey/tools/test_runner3.ahk +1 -3
- data/autohotkey/tools/tlm_grapher.ahk +1 -3
- data/autohotkey/tools/tlm_grapher3.ahk +1 -2
- data/autohotkey/tools/tlm_viewer.ahk +8 -3
- data/autohotkey/tools/tlm_viewer2.ahk +2 -3
- data/autohotkey/tools/tlm_viewer5.ahk +1 -2
- data/cosmos.gemspec +26 -20
- data/data/cmd_sequence.png +0 -0
- data/data/config/_array_params.yaml +23 -0
- data/data/config/_id_items.yaml +24 -0
- data/data/config/_id_params.yaml +58 -0
- data/data/config/_interfaces.yaml +206 -0
- data/data/config/_items.yaml +20 -0
- data/data/config/_params.yaml +58 -0
- data/data/config/cmd_tlm_server.yaml +110 -0
- data/data/config/command.yaml +38 -0
- data/data/config/command_modifiers.yaml +127 -0
- data/data/config/command_telemetry.yaml +3 -0
- data/data/config/data_viewer.yaml +43 -0
- data/data/config/handbook_creator.yaml +23 -0
- data/data/config/housekeeping_params.yaml +71 -0
- data/data/config/interface_modifiers.yaml +44 -0
- data/data/config/item_modifiers.yaml +172 -0
- data/data/config/launcher.yaml +117 -0
- data/data/config/limits_monitor.yaml +53 -0
- data/data/config/linegraph_params.yaml +30 -0
- data/data/config/linegraph_plot.yaml +106 -0
- data/data/config/page_modifiers.yaml +128 -0
- data/data/config/param_item_modifiers.yaml +41 -0
- data/data/config/parameter_modifiers.yaml +144 -0
- data/data/config/protocols.yaml +257 -0
- data/data/config/screen.yaml +151 -0
- data/data/config/script_runner.yaml +15 -0
- data/data/config/system.yaml +153 -0
- data/data/config/table_manager.yaml +76 -0
- data/data/config/table_parameter_modifiers.yaml +9 -0
- data/data/config/target.yaml +71 -0
- data/data/config/telemetry.yaml +73 -0
- data/data/config/telemetry_modifiers.yaml +129 -0
- data/data/config/test_runner.yaml +118 -0
- data/data/config/tlm_extractor.yaml +109 -0
- data/data/config/tlm_grapher.yaml +78 -0
- data/data/config/tlm_viewer.yaml +107 -0
- data/data/config/unknown.yaml +3 -0
- data/data/config/widgets.yaml +1339 -0
- data/data/config/xy_params.yaml +50 -0
- data/data/config/xy_plot.yaml +12 -0
- data/data/config_editor.png +0 -0
- data/data/crc.txt +172 -161
- data/data/delete.png +0 -0
- data/demo/config/data/crc.txt +56 -36
- data/demo/config/data/meta_init.txt +1 -4
- data/demo/config/system/system.txt +15 -3
- data/demo/config/system/system2.txt +13 -3
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
- data/demo/config/targets/EXAMPLE/target.txt +3 -1
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
- data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
- data/demo/config/targets/INST/screens/adcs.txt +39 -15
- data/demo/config/targets/INST/screens/commanding.txt +26 -19
- data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
- data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
- data/demo/config/targets/INST/screens/tabs.txt +0 -2
- data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
- data/demo/config/targets/INST/tables/EventAction.csv +9 -0
- data/demo/config/targets/INST/tables/EventAction.dat +0 -0
- data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
- data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
- data/demo/config/targets/INST/target.txt +4 -0
- data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
- data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
- data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
- data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
- data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
- data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
- data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
- data/demo/config/targets/SYSTEM/target.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
- data/demo/config/targets/TEMPLATED/target.txt +2 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
- data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
- data/demo/config/tools/launcher/launcher.txt +9 -6
- data/demo/config/tools/launcher/launcher2.txt +16 -13
- data/demo/config/tools/launcher/launcher_mini.txt +45 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
- data/demo/config/tools/test_runner/test_runner.txt +1 -1
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/demo/lib/example_background_task.rb +9 -5
- data/demo/lib/example_target.rb +5 -15
- data/demo/lib/scpi_target.rb +4 -10
- data/demo/procedures/cosmos_api_test.rb +17 -0
- data/demo/tools/CmdSequence +16 -0
- data/demo/tools/CmdSequence.bat +9 -0
- data/demo/tools/ConfigEditor +16 -0
- data/demo/tools/ConfigEditor.bat +9 -0
- data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
- data/ext/cosmos/ext/packet/packet.c +5 -5
- data/install/config/data/crc.txt +12 -8
- data/install/config/system/system.txt +13 -3
- data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
- data/install/config/targets/SYSTEM/target.txt +12 -0
- data/install/tools/CmdSequence +16 -0
- data/install/tools/CmdSequence.bat +9 -0
- data/install/tools/ConfigEditor +16 -0
- data/install/tools/ConfigEditor.bat +9 -0
- data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
- data/lib/cosmos.rb +1 -1
- data/lib/cosmos/config/config_parser.rb +147 -59
- data/lib/cosmos/config/meta_config_parser.rb +57 -0
- data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
- data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
- data/lib/cosmos/core_ext/array.rb +45 -5
- data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
- data/lib/cosmos/core_ext/file.rb +2 -2
- data/lib/cosmos/core_ext/kernel.rb +1 -6
- data/lib/cosmos/core_ext/objectspace.rb +0 -2
- data/lib/cosmos/core_ext/string.rb +27 -4
- data/lib/cosmos/core_ext/time.rb +39 -10
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
- data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
- data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
- data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
- data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
- data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
- data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
- data/lib/cosmos/gui/dialogs/splash.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
- data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
- data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
- data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
- data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
- data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
- data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
- data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
- data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
- data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
- data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
- data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
- data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
- data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
- data/lib/cosmos/gui/qt.rb +1 -1
- data/lib/cosmos/gui/qt_tool.rb +21 -10
- data/lib/cosmos/gui/text/completion.rb +23 -2
- data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
- data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
- data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
- data/lib/cosmos/interfaces.rb +10 -0
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
- data/lib/cosmos/interfaces/interface.rb +240 -22
- data/lib/cosmos/interfaces/linc_interface.rb +3 -5
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
- data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
- data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
- data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
- data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
- data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
- data/lib/cosmos/interfaces/serial_interface.rb +28 -23
- data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
- data/lib/cosmos/interfaces/stream_interface.rb +36 -108
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
- data/lib/cosmos/interfaces/udp_interface.rb +51 -83
- data/lib/cosmos/io/buffered_file.rb +92 -2
- data/lib/cosmos/io/json_drb.rb +2 -2
- data/lib/cosmos/io/posix_serial_driver.rb +3 -1
- data/lib/cosmos/io/raw_logger.rb +3 -3
- data/lib/cosmos/io/serial_driver.rb +14 -5
- data/lib/cosmos/io/win32_serial_driver.rb +16 -4
- data/lib/cosmos/packet_logs.rb +0 -1
- data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
- data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
- data/lib/cosmos/packets/binary_accessor.rb +599 -32
- data/lib/cosmos/packets/commands.rb +48 -24
- data/lib/cosmos/packets/packet.rb +140 -54
- data/lib/cosmos/packets/packet_config.rb +0 -2
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
- data/lib/cosmos/packets/structure.rb +81 -33
- data/lib/cosmos/packets/structure_item.rb +45 -5
- data/lib/cosmos/packets/telemetry.rb +149 -55
- data/lib/cosmos/script/api_shared.rb +1000 -0
- data/lib/cosmos/script/commands.rb +2 -2
- data/lib/cosmos/script/extract.rb +19 -4
- data/lib/cosmos/script/limits.rb +2 -0
- data/lib/cosmos/script/script.rb +1 -1
- data/lib/cosmos/script/scripting.rb +4 -784
- data/lib/cosmos/script/telemetry.rb +44 -23
- data/lib/cosmos/script/tools.rb +15 -69
- data/lib/cosmos/streams/serial_stream.rb +12 -19
- data/lib/cosmos/streams/stream.rb +2 -11
- data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
- data/lib/cosmos/system/system.rb +187 -31
- data/lib/cosmos/system/target.rb +11 -2
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
- data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
- data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
- data/lib/cosmos/tools/launcher/launcher.rb +29 -12
- data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
- data/lib/cosmos/tools/replay/replay.rb +36 -20
- data/lib/cosmos/tools/replay/replay_server.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
- data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
- data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
- data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
- data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
- data/lib/cosmos/top_level.rb +34 -24
- data/lib/cosmos/utilities/crc.rb +108 -6
- data/lib/cosmos/utilities/csv.rb +68 -14
- data/lib/cosmos/utilities/logger.rb +2 -2
- data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
- data/lib/cosmos/version.rb +6 -6
- data/lib/cosmos/win32/win32_main.rb +50 -46
- data/run_gui_tests.bat +3 -1
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
- data/spec/core_ext/file_spec.rb +1 -1
- data/spec/core_ext/objectspace_spec.rb +12 -9
- data/spec/core_ext/string_spec.rb +6 -0
- data/spec/core_ext/time_spec.rb +10 -0
- data/spec/gui/line_graph/line_clip_spec.rb +226 -224
- data/spec/gui/qt_spec.rb +81 -79
- data/spec/install/config/system/system.txt +0 -6
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
- data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
- data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
- data/spec/install/config/targets/SYSTEM/target.txt +12 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
- data/spec/interfaces/interface_spec.rb +402 -18
- data/spec/interfaces/linc_interface_spec.rb +37 -39
- data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
- data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
- data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
- data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
- data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
- data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
- data/spec/interfaces/serial_interface_spec.rb +35 -34
- data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
- data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
- data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
- data/spec/interfaces/udp_interface_spec.rb +120 -55
- data/spec/io/serial_driver_spec.rb +41 -39
- data/spec/io/udp_sockets_spec.rb +13 -8
- data/spec/io/win32_serial_driver_spec.rb +62 -59
- data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
- data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
- data/spec/packets/commands_spec.rb +5 -5
- data/spec/packets/packet_spec.rb +2 -14
- data/spec/script/extract_spec.rb +21 -7
- data/spec/script/scripting_spec.rb +261 -6
- data/spec/script/telemetry_spec.rb +17 -9
- data/spec/spec_helper.rb +26 -10
- data/spec/streams/serial_stream_spec.rb +87 -82
- data/spec/streams/tcpip_client_stream_spec.rb +12 -4
- data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
- data/spec/system/system_spec.rb +66 -50
- data/spec/system/target_spec.rb +33 -11
- data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
- data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
- data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
- data/spec/top_level/top_level_spec.rb +39 -11
- data/spec/utilities/csv_spec.rb +62 -20
- data/tasks/gemfile_stats.rake +6 -3
- data/test/performance/config/system/system_packets.txt +0 -1
- data/test/performance/config/system/system_threads.txt +0 -1
- metadata +177 -92
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
- data/autohotkey/config/targets/COSMOS/target.txt +0 -5
- data/autohotkey/userpath.txt +0 -1
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/demo/config/targets/COSMOS/screens/version.txt +0 -19
- data/demo/config/targets/COSMOS/target.txt +0 -11
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
- data/demo/userpath.txt +0 -1
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/install/config/targets/COSMOS/screens/version.txt +0 -19
- data/install/config/targets/COSMOS/target.txt +0 -9
- data/install/config/targets/SYSTEM/README.txt +0 -1
- data/install/userpath.txt +0 -1
- data/lib/cosmos/io/tcpip_server.rb +0 -571
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
- data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
- data/lib/cosmos/streams/stream_protocol.rb +0 -373
- data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
- data/spec/install/config/targets/COSMOS/target.txt +0 -5
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
- data/spec/install/userpath.txt +0 -1
- data/spec/interfaces/stream_interface_spec.rb +0 -157
- data/spec/io/tcpip_server_spec.rb +0 -338
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
- data/spec/streams/burst_stream_protocol_spec.rb +0 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
- data/spec/streams/length_stream_protocol_spec.rb +0 -300
- data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
- data/spec/streams/stream_protocol_spec.rb +0 -346
- data/spec/streams/template_stream_protocol_spec.rb +0 -156
- data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
- 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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
236
|
-
|
|
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/
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
data/lib/cosmos/core_ext/file.rb
CHANGED
|
@@ -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
|
-
|
|
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
|
|
@@ -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
|
-
|
|
165
|
-
|
|
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
|
-
|
|
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?
|
data/lib/cosmos/core_ext/time.rb
CHANGED
|
@@ -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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
self.
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
#
|
|
83
|
+
# @return [Integer] Current item as an integer
|
|
80
84
|
def integer
|
|
81
85
|
Integer(@combo_value.currentText)
|
|
82
86
|
end
|
|
83
87
|
|
|
84
|
-
#
|
|
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
|
-
#
|
|
93
|
+
# @return [String] Current item as a string
|
|
90
94
|
def string
|
|
91
95
|
@combo_value.currentText
|
|
92
96
|
end
|
|
93
97
|
|
|
94
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
end # module Cosmos
|
|
84
|
+
end
|
|
85
|
+
end
|