cosmos 4.1.1-java → 4.2.0-java
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/.gitignore +0 -2
- data/.travis.yml +2 -0
- data/.yardopts +1 -0
- data/Gemfile +1 -0
- data/Manifest.txt +130 -0
- data/autohotkey/tools/ConfigEditorAHK +19 -0
- data/autohotkey/tools/cmd_extractor.ahk +4 -4
- data/autohotkey/tools/cmd_sequence.ahk +9 -5
- data/autohotkey/tools/config_editor.ahk +197 -0
- data/autohotkey/tools/packet_viewer.ahk +12 -6
- data/autohotkey/tools/replay.ahk +29 -29
- data/autohotkey/tools/script_runner.ahk +10 -2
- data/autohotkey/tools/tlm_extractor.ahk +7 -8
- data/autohotkey/tools/tlm_grapher.ahk +21 -9
- data/bin/dart_import +2 -0
- data/cosmos.gemspec +18 -16
- data/data/config/cmd_tlm_server.yaml +9 -0
- data/data/config/interface_modifiers.yaml +17 -0
- data/data/config/item_modifiers.yaml +3 -3
- data/data/crc.txt +184 -90
- data/data/dart.png +0 -0
- data/demo/Gemfile +1 -0
- data/demo/Rakefile +4 -0
- data/demo/config/dart/Gemfile +54 -0
- data/demo/config/data/crc.txt +28 -21
- data/demo/config/system/system.txt +3 -0
- data/demo/config/system/system2.txt +3 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
- data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
- data/demo/config/targets/INST/screens/adcs.txt +2 -1
- data/demo/config/targets/INST/screens/array.txt +1 -1
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +7 -2
- data/demo/config/targets/INST/screens/graphs.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +1 -1
- data/demo/config/targets/INST/screens/hs.txt +2 -1
- data/demo/config/targets/INST/screens/latest.txt +1 -1
- data/demo/config/targets/INST/screens/limits.txt +1 -1
- data/demo/config/targets/INST/screens/other.txt +1 -1
- data/demo/config/targets/INST/screens/tabs.txt +1 -1
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
- data/demo/config/tools/launcher/launcher.txt +3 -2
- data/demo/tools/Dart +16 -0
- data/demo/tools/Dart.bat +9 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
- data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
- data/install/Gemfile +1 -0
- data/install/Rakefile +4 -0
- data/install/config/dart/Gemfile +54 -0
- data/install/config/data/crc.txt +6 -3
- data/install/config/system/system.txt +3 -0
- data/install/config/tools/launcher/launcher.txt +3 -2
- data/install/tools/Dart +16 -0
- data/install/tools/Dart.bat +9 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
- data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
- data/lib/cosmos/core_ext/time.rb +8 -8
- data/lib/cosmos/dart/.rspec +1 -0
- data/lib/cosmos/dart/Gemfile +69 -0
- data/lib/cosmos/dart/Rakefile +7 -0
- data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
- data/lib/cosmos/dart/app/assets/images/.keep +0 -0
- data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
- data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
- data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
- data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
- data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
- data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
- data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
- data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
- data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
- data/lib/cosmos/dart/app/models/application_record.rb +3 -0
- data/lib/cosmos/dart/app/models/item.rb +6 -0
- data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
- data/lib/cosmos/dart/app/models/packet.rb +4 -0
- data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
- data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
- data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
- data/lib/cosmos/dart/app/models/system_config.rb +2 -0
- data/lib/cosmos/dart/app/models/target.rb +4 -0
- data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
- data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
- data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
- data/lib/cosmos/dart/bin/bundle +3 -0
- data/lib/cosmos/dart/bin/rails +4 -0
- data/lib/cosmos/dart/bin/rake +4 -0
- data/lib/cosmos/dart/bin/setup +34 -0
- data/lib/cosmos/dart/bin/update +29 -0
- data/lib/cosmos/dart/config.ru +5 -0
- data/lib/cosmos/dart/config/application.rb +29 -0
- data/lib/cosmos/dart/config/boot.rb +3 -0
- data/lib/cosmos/dart/config/cable.yml +9 -0
- data/lib/cosmos/dart/config/database.yml +23 -0
- data/lib/cosmos/dart/config/environment.rb +5 -0
- data/lib/cosmos/dart/config/environments/development.rb +62 -0
- data/lib/cosmos/dart/config/environments/production.rb +84 -0
- data/lib/cosmos/dart/config/environments/test.rb +42 -0
- data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
- data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
- data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
- data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
- data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
- data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
- data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
- data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
- data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
- data/lib/cosmos/dart/config/locales/en.yml +23 -0
- data/lib/cosmos/dart/config/puma.rb +47 -0
- data/lib/cosmos/dart/config/routes.rb +3 -0
- data/lib/cosmos/dart/config/secrets.yml +22 -0
- data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
- data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
- data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
- data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
- data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
- data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
- data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
- data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
- data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
- data/lib/cosmos/dart/db/schema.rb +103 -0
- data/lib/cosmos/dart/db/seeds.rb +7 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
- data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
- data/lib/cosmos/dart/lib/dart_common.rb +749 -0
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
- data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
- data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
- data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
- data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
- data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
- data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
- data/lib/cosmos/dart/processes/dart.rb +145 -0
- data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
- data/lib/cosmos/dart/processes/dart_import.rb +63 -0
- data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
- data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
- data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
- data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
- data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
- data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
- data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
- data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
- data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
- data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
- data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
- data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
- data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
- data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
- data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
- data/lib/cosmos/gui/qt.rb +10 -1
- data/lib/cosmos/gui/text/completion.rb +10 -9
- data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
- data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
- data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
- data/lib/cosmos/interfaces/interface.rb +1 -2
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
- data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
- data/lib/cosmos/interfaces/stream_interface.rb +1 -0
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
- data/lib/cosmos/io/json_drb_object.rb +1 -1
- data/lib/cosmos/io/json_rpc.rb +2 -1
- data/lib/cosmos/io/win32_serial_driver.rb +2 -9
- data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
- data/lib/cosmos/packets/packet.rb +22 -12
- data/lib/cosmos/packets/packet_config.rb +2 -1
- data/lib/cosmos/packets/packet_item.rb +26 -24
- data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
- data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
- data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
- data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
- data/lib/cosmos/packets/structure.rb +10 -2
- data/lib/cosmos/packets/structure_item.rb +22 -8
- data/lib/cosmos/processors/statistics_processor.rb +2 -0
- data/lib/cosmos/script/api_shared.rb +13 -12
- data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
- data/lib/cosmos/script/commands.rb +3 -15
- data/lib/cosmos/script/script.rb +69 -23
- data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
- data/lib/cosmos/system/system.rb +42 -25
- data/lib/cosmos/system/target.rb +6 -2
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
- data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
- data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
- data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
- data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
- data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
- data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
- data/lib/cosmos/tools/test_runner/test.rb +1 -3
- data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
- data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
- data/lib/cosmos/top_level.rb +1 -0
- data/lib/cosmos/utilities/crc.rb +3 -0
- data/lib/cosmos/utilities/csv.rb +1 -0
- data/lib/cosmos/utilities/message_log.rb +2 -1
- data/lib/cosmos/utilities/simulated_target.rb +8 -8
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32.rb +4 -10
- data/run_gui_tests.bat +2 -1
- data/spec/config/config_parser_spec.rb +4 -4
- data/spec/core_ext/array_spec.rb +1 -1
- data/spec/core_ext/exception_spec.rb +12 -12
- data/spec/core_ext/file_spec.rb +6 -6
- data/spec/core_ext/hash_spec.rb +1 -1
- data/spec/core_ext/socket_spec.rb +2 -2
- data/spec/core_ext/string_spec.rb +13 -13
- data/spec/core_ext/time_spec.rb +0 -2
- data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
- data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
- data/spec/interfaces/interface_spec.rb +0 -1
- data/spec/interfaces/linc_interface_spec.rb +0 -5
- data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
- data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
- data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
- data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
- data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
- data/spec/interfaces/udp_interface_spec.rb +2 -4
- data/spec/io/buffered_file_spec.rb +8 -12
- data/spec/io/json_drb_spec.rb +9 -9
- data/spec/io/json_rpc_spec.rb +4 -4
- data/spec/io/raw_logger_spec.rb +4 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
- data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
- data/spec/packets/binary_accessor_spec.rb +5 -8
- data/spec/packets/commands_spec.rb +2 -2
- data/spec/packets/limits_spec.rb +2 -2
- data/spec/packets/packet_config_spec.rb +12 -0
- data/spec/packets/packet_item_limits_spec.rb +1 -1
- data/spec/packets/packet_item_spec.rb +9 -9
- data/spec/packets/packet_spec.rb +15 -5
- data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
- data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
- data/spec/packets/structure_spec.rb +2 -1
- data/spec/packets/telemetry_spec.rb +3 -5
- data/spec/processors/statistics_processor_spec.rb +35 -0
- data/spec/script/cmd_tlm_server_spec.rb +4 -21
- data/spec/script/commands_disconnect_spec.rb +46 -58
- data/spec/script/commands_spec.rb +40 -61
- data/spec/script/limits_spec.rb +1 -21
- data/spec/script/script_spec.rb +32 -41
- data/spec/script/scripting_spec.rb +166 -185
- data/spec/script/telemetry_spec.rb +10 -5
- data/spec/script/tools_spec.rb +2 -24
- data/spec/spec_helper.rb +11 -5
- data/spec/system/system_spec.rb +17 -12
- data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
- data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
- data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
- data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
- data/spec/tools/table_manager/table_config_spec.rb +0 -1
- data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
- data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
- data/spec/top_level/top_level_spec.rb +9 -9
- data/spec/utilities/csv_spec.rb +2 -12
- data/spec/utilities/logger_spec.rb +6 -6
- data/spec/utilities/message_log_spec.rb +3 -11
- data/tasks/gemfile_stats.rake +2 -2
- metadata +167 -60
|
@@ -94,7 +94,6 @@ module Cosmos
|
|
|
94
94
|
build_unknown_help()
|
|
95
95
|
|
|
96
96
|
# Configure Variables
|
|
97
|
-
@key_press_callback = nil
|
|
98
97
|
@output_time = Time.now.sys
|
|
99
98
|
initialize_variables()
|
|
100
99
|
|
|
@@ -152,10 +151,6 @@ module Cosmos
|
|
|
152
151
|
display_keyword_help()
|
|
153
152
|
end
|
|
154
153
|
|
|
155
|
-
def key_press_callback=(callback)
|
|
156
|
-
@editor.keyPressCallback = callback
|
|
157
|
-
end
|
|
158
|
-
|
|
159
154
|
def setFocus
|
|
160
155
|
@editor.setFocus
|
|
161
156
|
end
|
|
@@ -18,6 +18,7 @@ Cosmos.catch_fatal_exception do
|
|
|
18
18
|
require 'cosmos/gui/dialogs/exception_dialog'
|
|
19
19
|
require 'cosmos/gui/dialogs/packet_log_dialog'
|
|
20
20
|
require 'cosmos/gui/dialogs/find_replace_dialog'
|
|
21
|
+
require 'cosmos/gui/dialogs/dart_dialog'
|
|
21
22
|
require 'cosmos/gui/widgets/realtime_button_bar'
|
|
22
23
|
require 'cosmos/tools/data_viewer/data_viewer_component'
|
|
23
24
|
require 'cosmos/tools/data_viewer/dump_component'
|
|
@@ -51,6 +52,11 @@ module Cosmos
|
|
|
51
52
|
@log_filenames = []
|
|
52
53
|
@cancel_thread = false
|
|
53
54
|
@sleeper = Sleeper.new
|
|
55
|
+
@interface = Cosmos::TcpipClientInterface.new(
|
|
56
|
+
Cosmos::System.connect_hosts['DART_STREAM'],
|
|
57
|
+
Cosmos::System.ports['DART_STREAM'],
|
|
58
|
+
Cosmos::System.ports['DART_STREAM'],
|
|
59
|
+
10, 30, 'PREIDENTIFIED')
|
|
54
60
|
|
|
55
61
|
# Process config file and create a tab for each data viewer component
|
|
56
62
|
@component_mutex = Mutex.new
|
|
@@ -97,6 +103,12 @@ module Cosmos
|
|
|
97
103
|
@open_log.statusTip = tr('Open telemetry log file for processing')
|
|
98
104
|
@open_log.connect(SIGNAL('triggered()')) { handle_open_log_file() }
|
|
99
105
|
|
|
106
|
+
@query_dart = Qt::Action.new(tr('&Query DART Database'), self)
|
|
107
|
+
@query_dart_keyseq = Qt::KeySequence.new(tr('Ctrl+D'))
|
|
108
|
+
@query_dart.shortcut = @query_dart_keyseq
|
|
109
|
+
@query_dart.statusTip = tr('Query DART Database')
|
|
110
|
+
@query_dart.connect(SIGNAL('triggered()')) { handle_query_dart() }
|
|
111
|
+
|
|
100
112
|
@handle_reset = Qt::Action.new(tr('&Reset'), self)
|
|
101
113
|
@handle_reset_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
|
|
102
114
|
@handle_reset.shortcut = @handle_reset_keyseq
|
|
@@ -142,6 +154,7 @@ module Cosmos
|
|
|
142
154
|
# File Menu
|
|
143
155
|
file_menu = menuBar.addMenu(tr('&File'))
|
|
144
156
|
file_menu.addAction(@open_log)
|
|
157
|
+
file_menu.addAction(@query_dart)
|
|
145
158
|
file_menu.addAction(@handle_reset)
|
|
146
159
|
file_menu.addAction(@replay_action)
|
|
147
160
|
file_menu.addSeparator()
|
|
@@ -498,6 +511,104 @@ module Cosmos
|
|
|
498
511
|
end
|
|
499
512
|
end
|
|
500
513
|
|
|
514
|
+
def handle_query_dart
|
|
515
|
+
dart_dialog = DartDialog.new(self, 'Query DART Database:')
|
|
516
|
+
dart_dialog.time_start = @time_start
|
|
517
|
+
dart_dialog.time_end = @time_end
|
|
518
|
+
case dart_dialog.exec
|
|
519
|
+
when Qt::Dialog::Accepted
|
|
520
|
+
@time_start = dart_dialog.time_start
|
|
521
|
+
@time_end = dart_dialog.time_end
|
|
522
|
+
@meta_filters = dart_dialog.meta_filters
|
|
523
|
+
|
|
524
|
+
self.setWindowTitle("Data Viewer : DART Database Query")
|
|
525
|
+
|
|
526
|
+
handle_stop() # Stop realtime collection
|
|
527
|
+
handle_reset() # Reset
|
|
528
|
+
|
|
529
|
+
@cancel_progress = false
|
|
530
|
+
|
|
531
|
+
begin
|
|
532
|
+
ProgressDialog.execute(self, 'Querying DART Database', 500, 200, true, false, true, true, true) do |progress_dialog|
|
|
533
|
+
progress_dialog.cancel_callback = method(:cancel_callback)
|
|
534
|
+
progress_dialog.enable_cancel_button
|
|
535
|
+
|
|
536
|
+
begin
|
|
537
|
+
@interface.disconnect
|
|
538
|
+
request_packet = Cosmos::Packet.new('DART', 'DART')
|
|
539
|
+
request_packet.define_item('REQUEST', 0, 0, :BLOCK)
|
|
540
|
+
|
|
541
|
+
@time_start ||= Time.utc(1970, 1, 1)
|
|
542
|
+
@time_end ||= Time.now
|
|
543
|
+
@time_delta = @time_end - @time_start
|
|
544
|
+
request = {}
|
|
545
|
+
request['start_time_sec'] = @time_start.tv_sec
|
|
546
|
+
request['start_time_usec'] = @time_start.tv_usec
|
|
547
|
+
request['end_time_sec'] = @time_end.tv_sec
|
|
548
|
+
request['end_time_usec'] = @time_end.tv_usec
|
|
549
|
+
request['cmd_tlm'] = 'TLM'
|
|
550
|
+
request['packets'] = @packets
|
|
551
|
+
request['meta_filters'] = @meta_filters unless @meta_filters.empty?
|
|
552
|
+
request_packet.write('REQUEST', JSON.dump(request))
|
|
553
|
+
|
|
554
|
+
progress_dialog.append_text("Connecting to DART Database...")
|
|
555
|
+
@interface.connect
|
|
556
|
+
progress_dialog.append_text("Sending DART Database Query...")
|
|
557
|
+
@interface.write(request_packet)
|
|
558
|
+
progress_dialog.append_text("Receiving Packets...")
|
|
559
|
+
|
|
560
|
+
first = true
|
|
561
|
+
while true
|
|
562
|
+
break if @cancel_progress
|
|
563
|
+
packet = @interface.read
|
|
564
|
+
unless packet
|
|
565
|
+
progress_dialog.append_text("Done!")
|
|
566
|
+
progress_dialog.set_overall_progress(1.0)
|
|
567
|
+
@interface.disconnect
|
|
568
|
+
break
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
# Switch to correct configuration from SYSTEM META when needed
|
|
572
|
+
if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
|
|
573
|
+
meta_packet = System.telemetry.update!('SYSTEM', 'META', packet.buffer)
|
|
574
|
+
Cosmos::System.load_configuration(meta_packet.read('CONFIG'))
|
|
575
|
+
elsif first
|
|
576
|
+
first = false
|
|
577
|
+
@time_start = packet.received_time
|
|
578
|
+
@time_delta = @time_end - @time_start
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
defined_packet = System.telemetry.update!(packet.target_name, packet.packet_name, packet.buffer)
|
|
582
|
+
defined_packet.received_time = packet.received_time
|
|
583
|
+
|
|
584
|
+
break if @cancel_progress
|
|
585
|
+
# Route packet to its component(s)
|
|
586
|
+
index = defined_packet.target_name + ' ' + defined_packet.packet_name
|
|
587
|
+
components = @packet_to_components_mapping[index]
|
|
588
|
+
if components
|
|
589
|
+
@component_mutex.synchronize do
|
|
590
|
+
components.each do |component|
|
|
591
|
+
component.process_packet(defined_packet)
|
|
592
|
+
end
|
|
593
|
+
end
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
progress = ((@time_delta - (@time_end - defined_packet.received_time)).to_f / @time_delta.to_f)
|
|
597
|
+
progress_dialog.set_overall_progress(progress) if !@cancel_progress
|
|
598
|
+
end
|
|
599
|
+
ensure
|
|
600
|
+
progress_dialog.append_text("Canceled!") if @cancel_progress
|
|
601
|
+
progress_dialog.complete
|
|
602
|
+
end
|
|
603
|
+
end
|
|
604
|
+
rescue => error
|
|
605
|
+
Qt::MessageBox.critical(self, 'Error!', "Error Querying DART Database\n#{error.formatted}")
|
|
606
|
+
ensure
|
|
607
|
+
@interface.disconnect
|
|
608
|
+
end
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
|
|
501
612
|
def cancel_callback(progress_dialog = nil)
|
|
502
613
|
@cancel_progress = true
|
|
503
614
|
return true, false
|
|
@@ -107,13 +107,14 @@ module Cosmos
|
|
|
107
107
|
@initialized = false
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
-
#
|
|
111
|
-
# and don't have it count towards the
|
|
112
|
-
# its limits transitions in the log.
|
|
110
|
+
# Remove an item and optionally ignore it which means don't display it
|
|
111
|
+
# again if it goes out of limits and don't have it count towards the
|
|
112
|
+
# overall limit state. Still display its limits transitions in the log.
|
|
113
113
|
#
|
|
114
114
|
# @param item [Array<String,String,String>] Target name, packet name,
|
|
115
115
|
# item name to ignore
|
|
116
|
-
|
|
116
|
+
# @param ignore [Boolean] Whether to ignore future limits events
|
|
117
|
+
def remove(item, ignore)
|
|
117
118
|
if item[2]
|
|
118
119
|
items_to_delete = [item]
|
|
119
120
|
else
|
|
@@ -124,8 +125,10 @@ module Cosmos
|
|
|
124
125
|
widget = @items.delete("#{item_to_delete[0]} #{item_to_delete[1]} #{item_to_delete[2]}") if index
|
|
125
126
|
@remove_item_callback.call(widget) if widget
|
|
126
127
|
end
|
|
127
|
-
|
|
128
|
-
@ignored
|
|
128
|
+
if ignore
|
|
129
|
+
unless @ignored.includes_item?(item)
|
|
130
|
+
@ignored << item
|
|
131
|
+
end
|
|
129
132
|
end
|
|
130
133
|
end
|
|
131
134
|
|
|
@@ -133,7 +136,7 @@ module Cosmos
|
|
|
133
136
|
# count towards the overall limit state.
|
|
134
137
|
#
|
|
135
138
|
# @param item [Array<String,String>] Target name, packet name
|
|
136
|
-
def
|
|
139
|
+
def remove_stale(item)
|
|
137
140
|
index = @stale.delete_item(item)
|
|
138
141
|
widget = @items.delete("#{item[0]} #{item[1]}") if index
|
|
139
142
|
@remove_item_callback.call(widget) if widget
|
|
@@ -459,18 +462,24 @@ module Cosmos
|
|
|
459
462
|
@value.set_setting('COLORBLIND', [parent.limits_items.colorblind])
|
|
460
463
|
@value.process_settings
|
|
461
464
|
@ignore_button = Qt::PushButton.new('Ignore Item')
|
|
462
|
-
@ignore_button.connect(SIGNAL('clicked()')) { parent.
|
|
465
|
+
@ignore_button.connect(SIGNAL('clicked()')) { parent.remove(self, item) }
|
|
463
466
|
@layout.addWidget(@ignore_button)
|
|
464
467
|
|
|
465
468
|
@ignore_packet_button = Qt::PushButton.new('Ignore Packet')
|
|
466
|
-
@ignore_packet_button.connect(SIGNAL('clicked()')) { parent.
|
|
469
|
+
@ignore_packet_button.connect(SIGNAL('clicked()')) { parent.remove(self, packet) }
|
|
467
470
|
@layout.addWidget(@ignore_packet_button)
|
|
471
|
+
|
|
472
|
+
@delete_button = Qt::PushButton.new()
|
|
473
|
+
@delete_button.setFixedSize(25, 25)
|
|
474
|
+
@delete_button.setIcon(Cosmos.get_icon('delete.png'))
|
|
475
|
+
@delete_button.connect(SIGNAL('clicked()')) { parent.remove(self, item, ignore: false) }
|
|
476
|
+
@layout.addWidget(@delete_button)
|
|
468
477
|
else
|
|
469
478
|
@type = :STALE
|
|
470
479
|
@value = LabelWidget.new(@layout, "#{target_name} #{packet_name} is STALE")
|
|
471
480
|
@layout.addStretch(1)
|
|
472
481
|
@ignore_button = Qt::PushButton.new('Ignore Stale Packet')
|
|
473
|
-
@ignore_button.connect(SIGNAL('clicked()')) { parent.
|
|
482
|
+
@ignore_button.connect(SIGNAL('clicked()')) { parent.remove(self, packet) }
|
|
474
483
|
@layout.addWidget(@ignore_button)
|
|
475
484
|
end
|
|
476
485
|
end
|
|
@@ -601,7 +610,7 @@ module Cosmos
|
|
|
601
610
|
widget = Qt::Widget.new
|
|
602
611
|
layout = Qt::VBoxLayout.new(widget)
|
|
603
612
|
setCentralWidget(widget)
|
|
604
|
-
|
|
613
|
+
|
|
605
614
|
@replay_flag = Qt::Label.new("Replay Mode")
|
|
606
615
|
@replay_flag.setStyleSheet("background:green;color:white;padding:5px;font-weight:bold;")
|
|
607
616
|
layout.addWidget(@replay_flag)
|
|
@@ -860,22 +869,26 @@ module Cosmos
|
|
|
860
869
|
else
|
|
861
870
|
@replay_flag.hide
|
|
862
871
|
end
|
|
863
|
-
@scroll_layout.removeAll
|
|
872
|
+
@scroll_layout.removeAll
|
|
864
873
|
end
|
|
865
874
|
end
|
|
866
875
|
|
|
867
|
-
#
|
|
876
|
+
# Remove a limits item from the list and optionally ignore
|
|
868
877
|
#
|
|
878
|
+
# @param widget [Qt::Widget] Widget to remove
|
|
869
879
|
# @param item [Array<String,String,String] Array containing the target name,
|
|
870
880
|
# packet name, and item name of the item to ignore.
|
|
871
|
-
|
|
881
|
+
# @param ignore [Boolean] Whether to ignore the item
|
|
882
|
+
def remove(widget, item, ignore: true)
|
|
872
883
|
if widget.type == :ITEM
|
|
873
|
-
@limits_items.
|
|
884
|
+
@limits_items.remove(item, ignore)
|
|
874
885
|
else
|
|
875
|
-
@limits_items.
|
|
886
|
+
@limits_items.remove_stale(item)
|
|
876
887
|
end
|
|
877
|
-
|
|
878
|
-
|
|
888
|
+
if ignore
|
|
889
|
+
Qt.execute_in_main_thread(true) do
|
|
890
|
+
statusBar.showMessage('Warning: Some Telemetry Items are Ignored')
|
|
891
|
+
end
|
|
879
892
|
end
|
|
880
893
|
end
|
|
881
894
|
|
|
@@ -411,9 +411,10 @@ module Cosmos
|
|
|
411
411
|
@descriptions = []
|
|
412
412
|
|
|
413
413
|
row = 0
|
|
414
|
-
|
|
414
|
+
featured_row = -1
|
|
415
415
|
@ignored_rows = []
|
|
416
416
|
tlm_items.each do |tlm_name, states, description, derived|
|
|
417
|
+
featured_row = row if featured_item_name == tlm_name
|
|
417
418
|
@ignored_rows << row if System.targets[target_name].ignored_items.include?(tlm_name)
|
|
418
419
|
tlm_name = "*#{tlm_name}" if derived
|
|
419
420
|
item = Qt::TableWidgetItem.new(tr("#{tlm_name}:"))
|
|
@@ -428,12 +429,20 @@ module Cosmos
|
|
|
428
429
|
@descriptions[row][0] = description
|
|
429
430
|
@descriptions[row][1] = description
|
|
430
431
|
row += 1
|
|
431
|
-
featured_item = item if featured_item_name == tlm_name
|
|
432
432
|
end
|
|
433
433
|
|
|
434
434
|
@table.resizeColumnsToContents()
|
|
435
435
|
@table.resizeRowsToContents()
|
|
436
|
-
|
|
436
|
+
if featured_row != -1
|
|
437
|
+
# Selecting the row also scrolls to it so the item is displayed
|
|
438
|
+
@table.selectRow(featured_row)
|
|
439
|
+
# Fire up a thread to clear the selection cuz it's kind of annoying
|
|
440
|
+
Thread.new do
|
|
441
|
+
sleep 1
|
|
442
|
+
Qt.execute_in_main_thread { @table.clearSelection }
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
|
|
437
446
|
@frame.addWidget(@table)
|
|
438
447
|
|
|
439
448
|
# Handle Table Clicks
|
|
@@ -76,6 +76,10 @@ module Cosmos
|
|
|
76
76
|
initial_tabs.each {|filename| create_tab(filename)}
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
if options.disconnect_mode
|
|
80
|
+
script_toggle_disconnect(false)
|
|
81
|
+
end
|
|
82
|
+
|
|
79
83
|
if options.run_procedure
|
|
80
84
|
run_procedure(options.run_procedure)
|
|
81
85
|
end
|
|
@@ -340,6 +344,12 @@ module Cosmos
|
|
|
340
344
|
SLOT('handle_tab_change(int)'))
|
|
341
345
|
setCentralWidget(@tab_book)
|
|
342
346
|
|
|
347
|
+
next_child = Qt::Shortcut.new(Qt::KeySequence.new(Qt::CTRL + Qt::Key_Tab), self)
|
|
348
|
+
self.connect(next_child, SIGNAL('activated()')) { next_child() }
|
|
349
|
+
# Note using Qt::KeySequence::PreviousChild does not work due to QT bug
|
|
350
|
+
previous_child = Qt::Shortcut.new(Qt::KeySequence.new(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab), self)
|
|
351
|
+
self.connect(previous_child, SIGNAL('activated()')) { previous_child() }
|
|
352
|
+
|
|
343
353
|
# Display a blank message to force the statusBar to show
|
|
344
354
|
statusBar.showMessage("")
|
|
345
355
|
end
|
|
@@ -622,8 +632,8 @@ module Cosmos
|
|
|
622
632
|
end
|
|
623
633
|
|
|
624
634
|
# Script->Toggle Disconnect
|
|
625
|
-
def script_toggle_disconnect
|
|
626
|
-
@server_config_file = active_script_runner_frame().toggle_disconnect(@server_config_file)
|
|
635
|
+
def script_toggle_disconnect(ask_for_config_file = true)
|
|
636
|
+
@server_config_file = active_script_runner_frame().toggle_disconnect(@server_config_file, ask_for_config_file)
|
|
627
637
|
end
|
|
628
638
|
|
|
629
639
|
###########################################
|
|
@@ -749,17 +759,18 @@ module Cosmos
|
|
|
749
759
|
update_title()
|
|
750
760
|
end
|
|
751
761
|
|
|
752
|
-
def
|
|
762
|
+
def next_child
|
|
763
|
+
index = @tab_book.currentIndex + 1
|
|
764
|
+
index = 0 if index >= @tab_book.count
|
|
765
|
+
@tab_book.setCurrentIndex(index)
|
|
766
|
+
update_title()
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
def previous_child
|
|
770
|
+
index = @tab_book.currentIndex - 1
|
|
771
|
+
index = @tab_book.count - 1 if index < 0
|
|
772
|
+
@tab_book.setCurrentIndex(index)
|
|
753
773
|
update_title()
|
|
754
|
-
if event.matches(Qt::KeySequence::NextChild)
|
|
755
|
-
index = @tab_book.currentIndex + 1
|
|
756
|
-
index = 0 if index >= @tab_book.count
|
|
757
|
-
@tab_book.setCurrentIndex(index)
|
|
758
|
-
elsif event.matches(Qt::KeySequence::PreviousChild)
|
|
759
|
-
index = @tab_book.currentIndex - 1
|
|
760
|
-
index = @tab_book.count - 1 if index < 0
|
|
761
|
-
@tab_book.setCurrentIndex(index)
|
|
762
|
-
end
|
|
763
774
|
end
|
|
764
775
|
|
|
765
776
|
def context_menu(point)
|
|
@@ -849,8 +860,6 @@ module Cosmos
|
|
|
849
860
|
script_runner_frame.stop_callback = method(:stop_callback)
|
|
850
861
|
script_runner_frame.set_text_from_file(filename) unless filename.empty?
|
|
851
862
|
script_runner_frame.filename = filename
|
|
852
|
-
# Register a keypress handler so we can Ctrl-Tab our way through the tabs
|
|
853
|
-
script_runner_frame.key_press_callback = method(:handle_script_keypress)
|
|
854
863
|
# Update the title if the frame changes so we can add/remove the asterix
|
|
855
864
|
script_runner_frame.connect(SIGNAL('modificationChanged(bool)')) { update_title() }
|
|
856
865
|
|
|
@@ -957,6 +966,7 @@ module Cosmos
|
|
|
957
966
|
options.auto_size = false
|
|
958
967
|
options.server_config_file = CmdTlmServer::DEFAULT_CONFIG_FILE
|
|
959
968
|
options.run_procedure = nil
|
|
969
|
+
options.disconnect_mode = false
|
|
960
970
|
|
|
961
971
|
option_parser.separator "Script Runner Specific Options:"
|
|
962
972
|
option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
@@ -968,6 +978,9 @@ module Cosmos
|
|
|
968
978
|
option_parser.on("-r", "--run FILE", "Open and run the specified procedure") do |arg|
|
|
969
979
|
options.run_procedure = arg
|
|
970
980
|
end
|
|
981
|
+
option_parser.on("-d", "--disconnect", "Start in disconnect mode") do |arg|
|
|
982
|
+
options.disconnect_mode = true
|
|
983
|
+
end
|
|
971
984
|
end
|
|
972
985
|
|
|
973
986
|
super(option_parser, options)
|
|
@@ -34,6 +34,8 @@ module Cosmos
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# Create a dialog with an embedded ScriptRunnerFrame used to execute
|
|
38
|
+
# a snippet of code while the main script is paused.
|
|
37
39
|
class ScriptRunnerDialog < Qt::Dialog
|
|
38
40
|
attr_reader :script_runner_frame
|
|
39
41
|
|
|
@@ -65,8 +67,11 @@ module Cosmos
|
|
|
65
67
|
return if @script_runner_frame.running?
|
|
66
68
|
super
|
|
67
69
|
end
|
|
68
|
-
end
|
|
70
|
+
end
|
|
69
71
|
|
|
72
|
+
# Frame within ScriptRunner and TestRunner that handles instrumenting the
|
|
73
|
+
# script and running it. This includes handling all the user interation and
|
|
74
|
+
# how to run, step, pause, and stop a script.
|
|
70
75
|
class ScriptRunnerFrame < Qt::Widget
|
|
71
76
|
slots 'context_menu(const QPoint&)'
|
|
72
77
|
slots 'undo_available(bool)'
|
|
@@ -146,6 +151,16 @@ module Cosmos
|
|
|
146
151
|
@realtime_button_bar.stop_callback = method(:handle_stop_button)
|
|
147
152
|
@layout.addWidget(@realtime_button_bar)
|
|
148
153
|
|
|
154
|
+
# Create shortcuts to activate the RealtimeButtonBar actions
|
|
155
|
+
step = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F10), self)
|
|
156
|
+
self.connect(step, SIGNAL('activated()')) { handle_step_button() }
|
|
157
|
+
start_go = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F5), self)
|
|
158
|
+
self.connect(start_go, SIGNAL('activated()')) { handle_start_go_button() }
|
|
159
|
+
pause_retry = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F6), self)
|
|
160
|
+
self.connect(pause_retry, SIGNAL('activated()')) { handle_pause_retry_button() }
|
|
161
|
+
stop = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F7), self)
|
|
162
|
+
self.connect(stop, SIGNAL('activated()')) { handle_stop_button() }
|
|
163
|
+
|
|
149
164
|
# Create a splitter to hold the script text area and the script output text area.
|
|
150
165
|
@splitter = Qt::Splitter.new(Qt::Vertical, self)
|
|
151
166
|
@layout.addWidget(@splitter)
|
|
@@ -197,7 +212,6 @@ module Cosmos
|
|
|
197
212
|
@stop_callback = nil
|
|
198
213
|
@error_callback = nil
|
|
199
214
|
@pause_callback = nil
|
|
200
|
-
@key_press_callback = nil
|
|
201
215
|
@allow_start = true
|
|
202
216
|
@continue_after_error = true
|
|
203
217
|
@debug_text = nil
|
|
@@ -297,10 +311,6 @@ module Cosmos
|
|
|
297
311
|
emit undoAvailable(bool)
|
|
298
312
|
end
|
|
299
313
|
|
|
300
|
-
def key_press_callback=(callback)
|
|
301
|
-
@script.keyPressCallback = callback
|
|
302
|
-
end
|
|
303
|
-
|
|
304
314
|
def setFocus
|
|
305
315
|
@script.setFocus
|
|
306
316
|
end
|
|
@@ -695,9 +705,9 @@ module Cosmos
|
|
|
695
705
|
# There are other un-instrumentable lines which don't support breakpoints
|
|
696
706
|
# but this is the most common and is an easy check.
|
|
697
707
|
# Note: line is 1 based but @script.get_line is zero based so subtract 1
|
|
698
|
-
text = @
|
|
699
|
-
if text.strip.empty? || text.strip[0] == '#'
|
|
700
|
-
@
|
|
708
|
+
text = @active_script.get_line(line - 1)
|
|
709
|
+
if text && (text.strip.empty? || text.strip[0] == '#')
|
|
710
|
+
@active_script.clear_breakpoint(line) # Immediately clear it
|
|
701
711
|
else
|
|
702
712
|
ScriptRunnerFrame.set_breakpoint(current_tab_filename(), line)
|
|
703
713
|
end
|
|
@@ -908,7 +918,7 @@ module Cosmos
|
|
|
908
918
|
@debug_frame.addWidget(@debug_frame_label)
|
|
909
919
|
@debug_text = CompletionLineEdit.new(self)
|
|
910
920
|
@debug_text.setFocus(Qt::OtherFocusReason)
|
|
911
|
-
@debug_text.
|
|
921
|
+
@debug_text.connect(SIGNAL('key_pressed(QKeyEvent*)')) do |event|
|
|
912
922
|
case event.key
|
|
913
923
|
when Qt::Key_Return, Qt::Key_Enter
|
|
914
924
|
begin
|
|
@@ -961,7 +971,7 @@ module Cosmos
|
|
|
961
971
|
when Qt::Key_Escape
|
|
962
972
|
@debug_text.setPlainText("")
|
|
963
973
|
end
|
|
964
|
-
|
|
974
|
+
end
|
|
965
975
|
|
|
966
976
|
@debug_frame.addWidget(@debug_text)
|
|
967
977
|
|
|
@@ -1048,49 +1058,106 @@ module Cosmos
|
|
|
1048
1058
|
end
|
|
1049
1059
|
end
|
|
1050
1060
|
|
|
1051
|
-
def toggle_disconnect(config_file)
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
|
|
1057
|
-
dialog.setWindowTitle(tr("Server Config File"))
|
|
1058
|
-
dialog_layout = Qt::VBoxLayout.new
|
|
1061
|
+
def toggle_disconnect(config_file, ask_for_config_file = true)
|
|
1062
|
+
dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
|
|
1063
|
+
dialog.setWindowTitle(tr("Disconnect Settings"))
|
|
1064
|
+
dialog_layout = Qt::VBoxLayout.new
|
|
1065
|
+
dialog_layout.addWidget(Qt::Label.new("Targets checked will be disconnected."))
|
|
1059
1066
|
|
|
1067
|
+
all_targets = {}
|
|
1068
|
+
set_clear_layout = Qt::HBoxLayout.new
|
|
1069
|
+
check_all = Qt::PushButton.new("Check All")
|
|
1070
|
+
check_all.setAutoDefault(false)
|
|
1071
|
+
check_all.setDefault(false)
|
|
1072
|
+
check_all.connect(SIGNAL('clicked()')) do
|
|
1073
|
+
all_targets.each do |target, checkbox|
|
|
1074
|
+
checkbox.setChecked(true)
|
|
1075
|
+
end
|
|
1076
|
+
end
|
|
1077
|
+
set_clear_layout.addWidget(check_all)
|
|
1078
|
+
clear_all = Qt::PushButton.new("Clear All")
|
|
1079
|
+
clear_all.connect(SIGNAL('clicked()')) do
|
|
1080
|
+
all_targets.each do |target, checkbox|
|
|
1081
|
+
checkbox.setChecked(false)
|
|
1082
|
+
end
|
|
1083
|
+
end
|
|
1084
|
+
set_clear_layout.addWidget(clear_all)
|
|
1085
|
+
dialog_layout.addLayout(set_clear_layout)
|
|
1086
|
+
|
|
1087
|
+
scroll = Qt::ScrollArea.new
|
|
1088
|
+
target_widget = Qt::Widget.new
|
|
1089
|
+
scroll.setWidget(target_widget)
|
|
1090
|
+
target_layout = Qt::VBoxLayout.new(target_widget)
|
|
1091
|
+
target_layout.setSizeConstraint(Qt::Layout::SetMinAndMaxSize)
|
|
1092
|
+
scroll.setSizePolicy(Qt::SizePolicy::Preferred, Qt::SizePolicy::Expanding)
|
|
1093
|
+
scroll.setWidgetResizable(true)
|
|
1094
|
+
|
|
1095
|
+
existing = get_disconnected_targets()
|
|
1096
|
+
System.targets.keys.each do |target|
|
|
1097
|
+
check_layout = Qt::HBoxLayout.new
|
|
1098
|
+
check_label = Qt::CheckboxLabel.new(target)
|
|
1099
|
+
checkbox = Qt::CheckBox.new
|
|
1100
|
+
all_targets[target] = checkbox
|
|
1101
|
+
if existing
|
|
1102
|
+
checkbox.setChecked(existing && existing.include?(target))
|
|
1103
|
+
else
|
|
1104
|
+
checkbox.setChecked(true)
|
|
1105
|
+
end
|
|
1106
|
+
check_label.setCheckbox(checkbox)
|
|
1107
|
+
check_layout.addWidget(checkbox)
|
|
1108
|
+
check_layout.addWidget(check_label)
|
|
1109
|
+
check_layout.addStretch
|
|
1110
|
+
target_layout.addLayout(check_layout)
|
|
1111
|
+
end
|
|
1112
|
+
dialog_layout.addWidget(scroll)
|
|
1113
|
+
|
|
1114
|
+
if ask_for_config_file
|
|
1060
1115
|
chooser = FileChooser.new(self, "Config File", config_file, 'Select',
|
|
1061
1116
|
File.dirname(config_file))
|
|
1062
1117
|
chooser.callback = lambda do |filename|
|
|
1063
1118
|
chooser.filename = filename
|
|
1064
1119
|
end
|
|
1065
1120
|
dialog_layout.addWidget(chooser)
|
|
1121
|
+
end
|
|
1066
1122
|
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1123
|
+
button_layout = Qt::HBoxLayout.new
|
|
1124
|
+
ok = Qt::PushButton.new("Ok")
|
|
1125
|
+
ok.setAutoDefault(true)
|
|
1126
|
+
ok.setDefault(true)
|
|
1127
|
+
targets = []
|
|
1128
|
+
ok.connect(SIGNAL('clicked()')) do
|
|
1129
|
+
all_targets.each do |target, checkbox|
|
|
1130
|
+
targets << target if checkbox.isChecked
|
|
1072
1131
|
end
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1132
|
+
dialog.accept()
|
|
1133
|
+
end
|
|
1134
|
+
button_layout.addWidget(ok)
|
|
1135
|
+
cancel = Qt::PushButton.new("Cancel")
|
|
1136
|
+
cancel.connect(SIGNAL('clicked()')) do
|
|
1137
|
+
dialog.reject()
|
|
1138
|
+
end
|
|
1139
|
+
button_layout.addWidget(cancel)
|
|
1140
|
+
dialog_layout.addLayout(button_layout)
|
|
1141
|
+
|
|
1142
|
+
dialog.setLayout(dialog_layout)
|
|
1143
|
+
if dialog.exec == Qt::Dialog::Accepted
|
|
1144
|
+
if targets.empty?
|
|
1145
|
+
clear_disconnected_targets()
|
|
1146
|
+
self.parent.parent.parent.statusBar.showMessage("")
|
|
1147
|
+
self.setPalette(Qt::Palette.new(Cosmos::DEFAULT_PALETTE))
|
|
1148
|
+
else
|
|
1083
1149
|
config_file = chooser.filename
|
|
1084
|
-
self.parent.
|
|
1150
|
+
self.parent.parent.parent.statusBar.showMessage("Targets disconnected: #{targets.join(" ")}")
|
|
1151
|
+
self.setPalette(Qt::Palette.new(Cosmos::RED_PALETTE))
|
|
1085
1152
|
Splash.execute(self) do |splash|
|
|
1086
1153
|
ConfigParser.splash = splash
|
|
1087
1154
|
splash.message = "Initializing Command and Telemetry Server"
|
|
1088
|
-
|
|
1155
|
+
set_disconnected_targets(targets, config_file)
|
|
1089
1156
|
ConfigParser.splash = nil
|
|
1090
1157
|
end
|
|
1091
1158
|
end
|
|
1092
|
-
dialog.dispose
|
|
1093
1159
|
end
|
|
1160
|
+
dialog.dispose
|
|
1094
1161
|
config_file
|
|
1095
1162
|
end
|
|
1096
1163
|
|