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
|
@@ -12,7 +12,6 @@ require 'cosmos'
|
|
|
12
12
|
require 'cosmos/gui/qt'
|
|
13
13
|
|
|
14
14
|
module Cosmos
|
|
15
|
-
|
|
16
15
|
# Implements the targets tab in the Command and Telemetry Server GUI
|
|
17
16
|
class TargetsTab
|
|
18
17
|
def initialize(tab_widget)
|
|
@@ -30,8 +29,6 @@ module Cosmos
|
|
|
30
29
|
end
|
|
31
30
|
|
|
32
31
|
# Create the targets tab and add it to the tab_widget
|
|
33
|
-
#
|
|
34
|
-
# @param tab_widget [Qt::TabWidget] The tab widget to add the tab to
|
|
35
32
|
def populate
|
|
36
33
|
reset()
|
|
37
34
|
num_targets = System.targets.length
|
|
@@ -92,6 +89,5 @@ module Cosmos
|
|
|
92
89
|
row += 1
|
|
93
90
|
end
|
|
94
91
|
end
|
|
95
|
-
|
|
96
92
|
end
|
|
97
|
-
end
|
|
93
|
+
end
|
|
@@ -111,9 +111,10 @@ module Cosmos
|
|
|
111
111
|
if @groups.include?(method_name.to_s[6..-1].upcase)
|
|
112
112
|
check_methods << method_name.to_s
|
|
113
113
|
else
|
|
114
|
-
|
|
114
|
+
Logger.warn "Inside class #{self.class}, method #{method_name} doesn't match a group name.\n"\
|
|
115
115
|
"Methods must begin with 'check_' and end with a valid group name.\n"\
|
|
116
|
-
"
|
|
116
|
+
"You need to declare 'LIMITS_GROUP #{method_name.to_s[6..-1].upcase}' for #{method_name} to work.\n"\
|
|
117
|
+
"Currently defined groups: #{@groups.join(', ')}\n"\
|
|
117
118
|
end
|
|
118
119
|
end
|
|
119
120
|
end
|
|
@@ -15,6 +15,7 @@ module Cosmos
|
|
|
15
15
|
|
|
16
16
|
# The number of bytes to print when an UNKNOWN packet is received
|
|
17
17
|
UNKNOWN_BYTES_TO_PRINT = 36
|
|
18
|
+
SLIDER_GRANULARITY = 10000
|
|
18
19
|
|
|
19
20
|
attr_accessor :log_directory
|
|
20
21
|
attr_accessor :log_filename
|
|
@@ -30,6 +31,7 @@ module Cosmos
|
|
|
30
31
|
|
|
31
32
|
# Reset internal state
|
|
32
33
|
def reset
|
|
34
|
+
@first = true
|
|
33
35
|
@cancel = false
|
|
34
36
|
@playback_delay = 0.0
|
|
35
37
|
@default_packet_log_reader = System.default_packet_log_reader.new(*System.default_packet_log_reader_params)
|
|
@@ -46,8 +48,17 @@ module Cosmos
|
|
|
46
48
|
@progress = 0
|
|
47
49
|
@status = ''
|
|
48
50
|
@start_time = ''
|
|
51
|
+
@start_time_object = nil
|
|
49
52
|
@current_time = ''
|
|
53
|
+
@current_time_object = nil
|
|
50
54
|
@end_time = ''
|
|
55
|
+
@end_time_object = nil
|
|
56
|
+
@mode = :stream
|
|
57
|
+
@interface = Cosmos::TcpipClientInterface.new(
|
|
58
|
+
Cosmos::System.connect_hosts['DART_STREAM'],
|
|
59
|
+
Cosmos::System.ports['DART_STREAM'],
|
|
60
|
+
Cosmos::System.ports['DART_STREAM'],
|
|
61
|
+
10, 30, 'PREIDENTIFIED')
|
|
51
62
|
end
|
|
52
63
|
|
|
53
64
|
# Select and start analyzing a file for replay
|
|
@@ -56,6 +67,7 @@ module Cosmos
|
|
|
56
67
|
def select_file(filename, packet_log_reader = 'DEFAULT')
|
|
57
68
|
stop()
|
|
58
69
|
Cosmos.kill_thread(self, @thread)
|
|
70
|
+
@mode = :file
|
|
59
71
|
@thread = Thread.new do
|
|
60
72
|
begin
|
|
61
73
|
stop()
|
|
@@ -80,7 +92,7 @@ module Cosmos
|
|
|
80
92
|
@progress = 0
|
|
81
93
|
@status = "Analyzing: #{@progress}%"
|
|
82
94
|
start_config_name = System.configuration_name
|
|
83
|
-
|
|
95
|
+
Cosmos.check_log_configuration(@packet_log_reader, @log_filename)
|
|
84
96
|
if System.configuration_name != start_config_name
|
|
85
97
|
@config_change_callback.call() if @config_change_callback
|
|
86
98
|
end
|
|
@@ -98,7 +110,7 @@ module Cosmos
|
|
|
98
110
|
|
|
99
111
|
if @cancel
|
|
100
112
|
@packet_log_reader.close
|
|
101
|
-
@log_filename =
|
|
113
|
+
@log_filename = nil
|
|
102
114
|
@packet_offsets = []
|
|
103
115
|
@playback_index = 0
|
|
104
116
|
@start_time = ''
|
|
@@ -121,6 +133,46 @@ module Cosmos
|
|
|
121
133
|
end
|
|
122
134
|
end
|
|
123
135
|
|
|
136
|
+
# Setup streaming with the given arguments
|
|
137
|
+
#
|
|
138
|
+
# start_time [Time] Time at which stream should begin at
|
|
139
|
+
# end_time [Time] Time at which stream should stop
|
|
140
|
+
def select_stream(start_time, end_time, meta_filters = [])
|
|
141
|
+
stop()
|
|
142
|
+
Cosmos.kill_thread(self, @thread)
|
|
143
|
+
@thread = nil
|
|
144
|
+
@mode = :stream
|
|
145
|
+
@log_filename = nil
|
|
146
|
+
@log_directory = System.paths['LOGS']
|
|
147
|
+
@log_directory << '/' unless @log_directory[-1..-1] == '\\' or @log_directory[-1..-1] == '/'
|
|
148
|
+
@packet_offsets = []
|
|
149
|
+
|
|
150
|
+
System.telemetry.reset
|
|
151
|
+
@cancel = false
|
|
152
|
+
@progress = 0
|
|
153
|
+
@status = "Stream Ready"
|
|
154
|
+
# start_config_name = System.configuration_name
|
|
155
|
+
# Cosmos.check_log_configuration(@packet_log_reader, @log_filename)
|
|
156
|
+
# if System.configuration_name != start_config_name
|
|
157
|
+
# @config_change_callback.call() if @config_change_callback
|
|
158
|
+
# end
|
|
159
|
+
@playback_index = 0
|
|
160
|
+
@playback_max_index = SLIDER_GRANULARITY
|
|
161
|
+
start_time = Time.utc(1970, 1, 1).sys unless start_time
|
|
162
|
+
@start_time = start_time.formatted(true, 3, true)
|
|
163
|
+
end_time = Time.now.sys unless end_time
|
|
164
|
+
@end_time = end_time.formatted(true, 3, true)
|
|
165
|
+
@start_time_object = start_time.dup
|
|
166
|
+
@end_time_object = end_time.dup
|
|
167
|
+
@current_time = @start_time.dup
|
|
168
|
+
@current_time_object = start_time.dup
|
|
169
|
+
@meta_filters = meta_filters
|
|
170
|
+
@status = 'Stopped'
|
|
171
|
+
@playing = false
|
|
172
|
+
@playback_sleeper = nil
|
|
173
|
+
@first = true
|
|
174
|
+
end
|
|
175
|
+
|
|
124
176
|
# Get current replay status
|
|
125
177
|
#
|
|
126
178
|
# @return [status, playback_delay, filename, file_start, file_current, file_end, file_index, file_max_index]
|
|
@@ -155,8 +207,8 @@ module Cosmos
|
|
|
155
207
|
|
|
156
208
|
# Replay start playing forward
|
|
157
209
|
def play
|
|
158
|
-
if @log_filename and !@thread
|
|
159
|
-
@playback_index =
|
|
210
|
+
if (@mode == :stream or @log_filename) and !@thread
|
|
211
|
+
@playback_index = 0 if @playback_index < 0
|
|
160
212
|
start_playback(:FORWARD)
|
|
161
213
|
else
|
|
162
214
|
stop()
|
|
@@ -165,8 +217,8 @@ module Cosmos
|
|
|
165
217
|
|
|
166
218
|
# Replay start playing backward
|
|
167
219
|
def reverse_play
|
|
168
|
-
if @log_filename and !@thread
|
|
169
|
-
@playback_index = @packet_offsets.length - 2 if @playback_index >= @packet_offsets.length
|
|
220
|
+
if (@mode == :stream or @log_filename) and !@thread
|
|
221
|
+
@playback_index = @packet_offsets.length - 2 if @mode != :stream and @playback_index >= @packet_offsets.length
|
|
170
222
|
start_playback(:BACKWARD)
|
|
171
223
|
else
|
|
172
224
|
stop()
|
|
@@ -202,9 +254,15 @@ module Cosmos
|
|
|
202
254
|
|
|
203
255
|
# Replay move to start of file
|
|
204
256
|
def move_start
|
|
205
|
-
if @log_filename and !@thread
|
|
206
|
-
|
|
207
|
-
|
|
257
|
+
if (@mode == :stream or @log_filename) and !@thread
|
|
258
|
+
if @mode == :stream
|
|
259
|
+
@playback_index = 0
|
|
260
|
+
@current_time = @start_time.dup
|
|
261
|
+
@current_time_object = @start_time_object.dup
|
|
262
|
+
else
|
|
263
|
+
packet = read_at_index(0, :FORWARD)
|
|
264
|
+
@start_time = packet.received_time.formatted(true, 3, true) if packet and packet.received_time
|
|
265
|
+
end
|
|
208
266
|
else
|
|
209
267
|
stop()
|
|
210
268
|
end
|
|
@@ -212,9 +270,15 @@ module Cosmos
|
|
|
212
270
|
|
|
213
271
|
# Replay move to end of file
|
|
214
272
|
def move_end
|
|
215
|
-
if @log_filename and !@thread
|
|
216
|
-
|
|
217
|
-
|
|
273
|
+
if (@mode == :stream or @log_filename) and !@thread
|
|
274
|
+
if @mode == :stream
|
|
275
|
+
@playback_index = SLIDER_GRANULARITY
|
|
276
|
+
@current_time = @end_time.dup
|
|
277
|
+
@current_time_object = @end_time_object.dup
|
|
278
|
+
else
|
|
279
|
+
packet = read_at_index(@packet_offsets.length - 1, :FORWARD)
|
|
280
|
+
@end_time = packet.received_time.formatted(true, 3, true) if packet and packet.received_time
|
|
281
|
+
end
|
|
218
282
|
else
|
|
219
283
|
stop()
|
|
220
284
|
end
|
|
@@ -224,8 +288,18 @@ module Cosmos
|
|
|
224
288
|
#
|
|
225
289
|
# @param index [Integer] packet index into file
|
|
226
290
|
def move_index(index)
|
|
227
|
-
if @log_filename and !@thread
|
|
228
|
-
|
|
291
|
+
if (@mode == :stream or @log_filename) and !@thread
|
|
292
|
+
if @mode == :stream
|
|
293
|
+
@playback_index = index
|
|
294
|
+
total_seconds = @end_time_object - @start_time_object
|
|
295
|
+
delta = (total_seconds / SLIDER_GRANULARITY.to_f) * index
|
|
296
|
+
@current_time_object = @start_time_object + delta
|
|
297
|
+
@current_time = @current_time_object.formatted(true, 3, true)
|
|
298
|
+
else
|
|
299
|
+
read_at_index(index, :FORWARD)
|
|
300
|
+
end
|
|
301
|
+
else
|
|
302
|
+
stop()
|
|
229
303
|
end
|
|
230
304
|
end
|
|
231
305
|
|
|
@@ -244,6 +318,7 @@ module Cosmos
|
|
|
244
318
|
|
|
245
319
|
def start_playback(direction)
|
|
246
320
|
@thread = Thread.new do
|
|
321
|
+
packet_count = 0
|
|
247
322
|
@playback_sleeper = Sleeper.new
|
|
248
323
|
error = nil
|
|
249
324
|
begin
|
|
@@ -256,6 +331,8 @@ module Cosmos
|
|
|
256
331
|
packet_start = Time.now.sys
|
|
257
332
|
packet = read_at_index(@playback_index, direction)
|
|
258
333
|
break unless packet
|
|
334
|
+
packet_count += 1
|
|
335
|
+
|
|
259
336
|
delay_time = 0.0
|
|
260
337
|
if @playback_delay
|
|
261
338
|
# Fixed Time Delay
|
|
@@ -269,6 +346,7 @@ module Cosmos
|
|
|
269
346
|
end
|
|
270
347
|
end
|
|
271
348
|
if delay_time > 0.0
|
|
349
|
+
delay_time = 1.0 if delay_time > 1.0 # prevents large delays from gaps
|
|
272
350
|
break if @playback_sleeper.sleep(delay_time)
|
|
273
351
|
end
|
|
274
352
|
previous_packet = packet
|
|
@@ -276,39 +354,93 @@ module Cosmos
|
|
|
276
354
|
# No Delay
|
|
277
355
|
packet = read_at_index(@playback_index, direction)
|
|
278
356
|
break unless packet
|
|
357
|
+
packet_count += 1
|
|
279
358
|
previous_packet = packet
|
|
280
359
|
end
|
|
281
360
|
end
|
|
282
361
|
rescue Exception => error
|
|
283
362
|
Logger.error "Error in Playback Thread\n#{error.formatted}"
|
|
284
363
|
ensure
|
|
364
|
+
Logger.info "Replayed Packet Count = #{packet_count}"
|
|
285
365
|
@status = 'Stopped'
|
|
286
366
|
@playing = false
|
|
287
367
|
@playback_sleeper = nil
|
|
288
368
|
@thread = nil
|
|
369
|
+
@interface.disconnect
|
|
289
370
|
end
|
|
290
371
|
end
|
|
291
372
|
end
|
|
292
373
|
|
|
293
374
|
def read_at_index(index, direction)
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
375
|
+
if @mode == :file
|
|
376
|
+
packet_offset = nil
|
|
377
|
+
packet_offset = @packet_offsets[index] if index >= 0
|
|
378
|
+
if packet_offset
|
|
379
|
+
# Read the packet
|
|
380
|
+
packet = @packet_log_reader.read_at_offset(packet_offset, false)
|
|
381
|
+
handle_packet(packet)
|
|
382
|
+
|
|
383
|
+
# Adjust index for next read
|
|
384
|
+
if direction == :FORWARD
|
|
385
|
+
@playback_index = index + 1
|
|
386
|
+
else
|
|
387
|
+
@playback_index = index - 1
|
|
388
|
+
end
|
|
389
|
+
@current_time_object = packet.received_time
|
|
390
|
+
@current_time = packet.received_time.formatted(true, 3, true) if packet and packet.received_time
|
|
300
391
|
|
|
301
|
-
|
|
302
|
-
if direction == :FORWARD
|
|
303
|
-
@playback_index = index + 1
|
|
392
|
+
return packet
|
|
304
393
|
else
|
|
305
|
-
|
|
394
|
+
return nil
|
|
395
|
+
end
|
|
396
|
+
else
|
|
397
|
+
unless @interface.connected?
|
|
398
|
+
request_packet = Cosmos::Packet.new('DART', 'DART')
|
|
399
|
+
request_packet.define_item('REQUEST', 0, 0, :BLOCK)
|
|
400
|
+
|
|
401
|
+
request = {}
|
|
402
|
+
if direction == :FORWARD
|
|
403
|
+
request['start_time_sec'] = @current_time_object.tv_sec
|
|
404
|
+
request['start_time_usec'] = @current_time_object.tv_usec
|
|
405
|
+
request['end_time_sec'] = @end_time_object.tv_sec
|
|
406
|
+
request['end_time_usec'] = @end_time_object.tv_usec
|
|
407
|
+
else
|
|
408
|
+
request['start_time_sec'] = @current_time_object.tv_sec
|
|
409
|
+
request['start_time_usec'] = @current_time_object.tv_usec
|
|
410
|
+
request['end_time_sec'] = @start_time_object.tv_sec
|
|
411
|
+
request['end_time_usec'] = @start_time_object.tv_usec
|
|
412
|
+
end
|
|
413
|
+
request['cmd_tlm'] = 'TLM'
|
|
414
|
+
request['meta_filters'] = @meta_filters unless @meta_filters.empty?
|
|
415
|
+
request_packet.write('REQUEST', JSON.dump(request))
|
|
416
|
+
|
|
417
|
+
@interface.connect
|
|
418
|
+
@interface.write(request_packet)
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
packet = @interface.read
|
|
422
|
+
unless packet
|
|
423
|
+
@interface.disconnect
|
|
424
|
+
return nil
|
|
306
425
|
end
|
|
307
|
-
|
|
426
|
+
|
|
427
|
+
# Switch to correct configuration from SYSTEM META when needed
|
|
428
|
+
if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
|
|
429
|
+
meta_packet = System.telemetry.update!('SYSTEM', 'META', packet.buffer)
|
|
430
|
+
Cosmos::System.load_configuration(meta_packet.read('CONFIG'))
|
|
431
|
+
end
|
|
432
|
+
handle_packet(packet)
|
|
433
|
+
|
|
434
|
+
@current_time_object = packet.received_time
|
|
435
|
+
@current_time = packet.received_time.formatted(true, 3, true)
|
|
436
|
+
if @first
|
|
437
|
+
@first = false
|
|
438
|
+
@start_time_object = @current_time_object.dup
|
|
439
|
+
@start_time = @current_time.dup
|
|
440
|
+
end
|
|
441
|
+
@playback_index = ((((@end_time_object - @start_time_object) - (@end_time_object - @current_time_object)).to_f / (@end_time_object - @start_time_object).to_f) * SLIDER_GRANULARITY).to_i
|
|
308
442
|
|
|
309
443
|
return packet
|
|
310
|
-
else
|
|
311
|
-
return nil
|
|
312
444
|
end
|
|
313
445
|
end
|
|
314
446
|
|
|
@@ -55,7 +55,7 @@ module Cosmos
|
|
|
55
55
|
# All interfaces defined by the Command/Telemetry configuration are
|
|
56
56
|
# directed to this router to output commands
|
|
57
57
|
#
|
|
58
|
-
# @param
|
|
58
|
+
# @param cmd_router_name [String] Name of the command router
|
|
59
59
|
# @param port [Integer] Port to pass to the {TcpipServerInterface}
|
|
60
60
|
def add_cmd_preidentified(cmd_router_name, port)
|
|
61
61
|
cmd_router_name = cmd_router_name.upcase
|
|
@@ -326,6 +326,12 @@ module Cosmos
|
|
|
326
326
|
@splitter.setSizes([200, 800]) # Rough split of the widget
|
|
327
327
|
setCentralWidget(@splitter)
|
|
328
328
|
|
|
329
|
+
next_child = Qt::Shortcut.new(Qt::KeySequence.new(Qt::CTRL + Qt::Key_Tab), self)
|
|
330
|
+
self.connect(next_child, SIGNAL('activated()')) { next_child() }
|
|
331
|
+
# Note using Qt::KeySequence::PreviousChild does not work due to QT bug
|
|
332
|
+
previous_child = Qt::Shortcut.new(Qt::KeySequence.new(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab), self)
|
|
333
|
+
self.connect(previous_child, SIGNAL('activated()')) { previous_child() }
|
|
334
|
+
|
|
329
335
|
# Display a blank message to force the statusBar to show
|
|
330
336
|
statusBar.showMessage("")
|
|
331
337
|
@status_bar_right_label = Qt::Label.new
|
|
@@ -615,46 +621,6 @@ module Cosmos
|
|
|
615
621
|
end
|
|
616
622
|
end
|
|
617
623
|
|
|
618
|
-
def enable_menu_items
|
|
619
|
-
# Enable File Menu Items
|
|
620
|
-
@file_new.setEnabled(true)
|
|
621
|
-
@file_open.setEnabled(true)
|
|
622
|
-
@file_close.setEnabled(true)
|
|
623
|
-
@file_reload.setEnabled(true)
|
|
624
|
-
@file_save.setEnabled(true)
|
|
625
|
-
@file_save_as.setEnabled(true)
|
|
626
|
-
@file_options.setEnabled(true)
|
|
627
|
-
|
|
628
|
-
# Enable Edit Menu Items
|
|
629
|
-
@edit_undo.setEnabled(true)
|
|
630
|
-
@edit_redo.setEnabled(true)
|
|
631
|
-
@edit_cut.setEnabled(true)
|
|
632
|
-
@edit_copy.setEnabled(true)
|
|
633
|
-
@edit_paste.setEnabled(true)
|
|
634
|
-
@edit_select_all.setEnabled(true)
|
|
635
|
-
@edit_comment.setEnabled(true)
|
|
636
|
-
end
|
|
637
|
-
|
|
638
|
-
def disable_menu_items
|
|
639
|
-
# Disable File Menu Items
|
|
640
|
-
@file_new.setEnabled(false)
|
|
641
|
-
@file_open.setEnabled(false)
|
|
642
|
-
@file_close.setEnabled(false)
|
|
643
|
-
@file_reload.setEnabled(false)
|
|
644
|
-
@file_save.setEnabled(false)
|
|
645
|
-
@file_save_as.setEnabled(false)
|
|
646
|
-
@file_options.setEnabled(false)
|
|
647
|
-
|
|
648
|
-
# Disable Edit Menu Items
|
|
649
|
-
@edit_undo.setEnabled(false)
|
|
650
|
-
@edit_redo.setEnabled(false)
|
|
651
|
-
@edit_cut.setEnabled(false)
|
|
652
|
-
@edit_copy.setEnabled(false)
|
|
653
|
-
@edit_paste.setEnabled(false)
|
|
654
|
-
@edit_select_all.setEnabled(false)
|
|
655
|
-
@edit_comment.setEnabled(false)
|
|
656
|
-
end
|
|
657
|
-
|
|
658
624
|
# Handle the user changing tabs
|
|
659
625
|
def handle_tab_change(index)
|
|
660
626
|
update_title()
|
|
@@ -662,17 +628,18 @@ module Cosmos
|
|
|
662
628
|
update_tree()
|
|
663
629
|
end
|
|
664
630
|
|
|
665
|
-
def
|
|
631
|
+
def next_child
|
|
632
|
+
index = @tab_book.currentIndex + 1
|
|
633
|
+
index = 0 if index >= @tab_book.count
|
|
634
|
+
@tab_book.setCurrentIndex(index)
|
|
635
|
+
update_title()
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
def previous_child
|
|
639
|
+
index = @tab_book.currentIndex - 1
|
|
640
|
+
index = @tab_book.count - 1 if index < 0
|
|
641
|
+
@tab_book.setCurrentIndex(index)
|
|
666
642
|
update_title()
|
|
667
|
-
if event.matches(Qt::KeySequence::NextChild)
|
|
668
|
-
index = @tab_book.currentIndex + 1
|
|
669
|
-
index = 0 if index >= @tab_book.count
|
|
670
|
-
@tab_book.setCurrentIndex(index)
|
|
671
|
-
elsif event.matches(Qt::KeySequence::PreviousChild)
|
|
672
|
-
index = @tab_book.currentIndex - 1
|
|
673
|
-
index = @tab_book.count - 1 if index < 0
|
|
674
|
-
@tab_book.setCurrentIndex(index)
|
|
675
|
-
end
|
|
676
643
|
end
|
|
677
644
|
|
|
678
645
|
def tab_context_menu(point)
|
|
@@ -779,8 +746,6 @@ module Cosmos
|
|
|
779
746
|
SLOT('undo_available(bool)'))
|
|
780
747
|
config_editor_frame.set_text_from_file(filename) unless filename.empty?
|
|
781
748
|
config_editor_frame.filename = filename
|
|
782
|
-
# Register a keypress handler so we can Ctrl-Tab our way through the tabs
|
|
783
|
-
config_editor_frame.key_press_callback = method(:handle_script_keypress)
|
|
784
749
|
# Update the title if the frame changes so we can add/remove the asterix
|
|
785
750
|
config_editor_frame.connect(SIGNAL('modificationChanged(bool)')) { update_title() }
|
|
786
751
|
config_editor_frame.connect(SIGNAL('cursorPositionChanged()')) { update_cursor() }
|