cosmos 4.3.0-java → 4.4.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/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
- data/.gitignore +1 -0
- data/.travis.yml +5 -5
- data/Manifest.txt +81 -44
- data/Rakefile +9 -0
- data/appveyor.yml +2 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
- data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
- data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/tools/limits_monitor.ahk +1 -1
- data/autohotkey/tools/packet_viewer.ahk +1 -1
- data/autohotkey/tools/script_runner.ahk +16 -4
- data/bin/cosmos +1 -1
- data/bin/xtce_converter +1 -1
- data/cosmos.gemspec +5 -7
- data/data/config/_interfaces.yaml +4 -0
- data/data/config/cmd_sequence.yaml +14 -0
- data/data/config/housekeeping_params.yaml +14 -0
- data/data/config/interface_modifiers.yaml +11 -0
- data/data/config/item_modifiers.yaml +2 -1
- data/data/config/launcher.yaml +12 -2
- data/data/config/param_item_modifiers.yaml +2 -2
- data/data/config/parameter_modifiers.yaml +20 -0
- data/data/config/screen.yaml +2 -0
- data/data/config/script_runner.yaml +9 -0
- data/data/config/system.yaml +47 -10
- data/data/config/table_manager.yaml +7 -0
- data/data/config/target.yaml +12 -0
- data/data/config/telemetry_modifiers.yaml +3 -1
- data/data/config/test_runner.yaml +10 -9
- data/data/config/widgets.yaml +174 -11
- data/data/crc.txt +128 -125
- data/demo/Gemfile +1 -1
- data/demo/Launcher.bat +1 -9
- data/demo/Launcher2.bat +1 -0
- data/demo/LauncherMini.bat +1 -0
- data/demo/config/data/crc.txt +40 -20
- data/demo/config/system/system.txt +1 -1
- data/demo/config/system/system_alt_ports.txt +1 -1
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -1
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +7 -7
- data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
- data/demo/config/targets/INST/screens/adcs.txt +2 -2
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +27 -5
- data/demo/config/targets/INST/screens/ground_error.gif +0 -0
- data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
- data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
- data/demo/config/targets/INST/screens/limits.txt +69 -31
- data/demo/config/targets/INST/screens/other.txt +13 -3
- data/demo/config/targets/INST/screens/params.txt +54 -0
- data/demo/config/targets/INST/screens/satellite.gif +0 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/demo/config/tools/script_runner/script_runner.txt +1 -2
- data/demo/config/tools/test_runner/test_runner.txt +3 -1
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/cosmos_api_test.rb +1 -1
- data/demo/procedures/interactive.rb +22 -0
- data/ext/cosmos/ext/packet/packet.c +0 -77
- data/install/Gemfile +1 -1
- data/install/Launcher.bat +1 -9
- data/install/config/data/crc.txt +17 -1
- data/install/config/system/system.txt +1 -1
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/lib/cosmos/config/config_parser.rb +4 -5
- data/lib/cosmos/dart/lib/dart_common.rb +1 -1
- data/lib/cosmos/gui/dialogs/details_dialog.rb +16 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -0
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
- data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
- data/lib/cosmos/gui/qt.rb +3 -1
- data/lib/cosmos/gui/qt_tool.rb +46 -23
- data/lib/cosmos/gui/text/ruby_editor.rb +44 -41
- data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
- data/lib/cosmos/gui/utilities/script_module_gui.rb +92 -92
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/interface.rb +5 -1
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +6 -1
- data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
- data/lib/cosmos/io/json_drb.rb +11 -7
- data/lib/cosmos/packets/commands.rb +28 -11
- data/lib/cosmos/packets/packet.rb +69 -32
- data/lib/cosmos/packets/packet_config.rb +34 -1
- data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
- data/lib/cosmos/packets/parsers/xtce_parser.rb +4 -3
- data/lib/cosmos/packets/structure.rb +4 -2
- data/lib/cosmos/packets/telemetry.rb +19 -3
- data/lib/cosmos/script/api_shared.rb +12 -9
- data/lib/cosmos/script/scripting.rb +16 -14
- data/lib/cosmos/system/system.rb +39 -20
- data/lib/cosmos/system/target.rb +39 -9
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +94 -35
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +3 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +30 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +1 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +9 -12
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +5 -2
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
- data/lib/cosmos/tools/config_editor/config_editor.rb +80 -24
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +2 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +15 -9
- data/lib/cosmos/tools/data_viewer/dump_component.rb +2 -9
- data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +64 -38
- data/lib/cosmos/tools/launcher/launcher.rb +1 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -17
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +8 -6
- data/lib/cosmos/tools/script_runner/script_runner.rb +87 -29
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +41 -7
- data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +6 -3
- data/lib/cosmos/tools/test_runner/test_runner.rb +14 -9
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +21 -9
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +11 -8
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +9 -15
- data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -1
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +2 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +54 -46
- data/lib/cosmos/top_level.rb +23 -12
- data/lib/cosmos/version.rb +4 -4
- data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/spec/install/yaml_docs_spec.rb +112 -0
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
- data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
- data/spec/packets/commands_spec.rb +22 -0
- data/spec/packets/packet_config_spec.rb +24 -0
- data/spec/packets/packet_item_spec.rb +2 -2
- data/spec/packets/packet_spec.rb +39 -6
- data/spec/packets/parsers/state_parser_spec.rb +33 -11
- data/spec/packets/structure_spec.rb +41 -0
- data/spec/packets/telemetry_spec.rb +23 -0
- data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
- data/spec/system/system_spec.rb +77 -2
- data/spec/system/target_spec.rb +62 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +1 -1
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
- data/spec/top_level/top_level_spec.rb +29 -5
- data/tasks/gemfile_stats.rake +28 -14
- data/test/performance/config/system/system.txt +0 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
- data/test/performance/procedures/cosmos_api_test.rb +1 -1
- data/test/performance/tools/identify_performance.rb +82 -0
- metadata +92 -55
|
@@ -181,6 +181,7 @@ module Cosmos
|
|
|
181
181
|
unless option_parser and options
|
|
182
182
|
option_parser, options = create_default_options()
|
|
183
183
|
options.title = 'Launcher'
|
|
184
|
+
options.config_file = true # config_file is required
|
|
184
185
|
end
|
|
185
186
|
option_parser.separator "Launcher Specific Options:"
|
|
186
187
|
option_parser.on("-m", "--mini", "Create mini launcher") do |arg|
|
|
@@ -84,11 +84,13 @@ module Cosmos
|
|
|
84
84
|
# @param update_item_callback [Proc] Method to update an item in the GUI
|
|
85
85
|
# @param clear_items_callback [Proc] Method to clear all items in the GUI
|
|
86
86
|
# @param remove_item_callback [Proc] Method to remove an item from the GUI
|
|
87
|
-
|
|
87
|
+
# @param clear_log_callback [Proc] Method to clear the log tab in the GUI
|
|
88
|
+
def initialize(new_item_callback, update_item_callback, clear_items_callback, remove_item_callback, clear_log_callback)
|
|
88
89
|
@new_item_callback = new_item_callback
|
|
89
90
|
@update_item_callback = update_item_callback
|
|
90
91
|
@clear_items_callback = clear_items_callback
|
|
91
92
|
@remove_item_callback = remove_item_callback
|
|
93
|
+
@clear_log_callback = clear_log_callback
|
|
92
94
|
@ignored = []
|
|
93
95
|
@ignored_stale = []
|
|
94
96
|
@items = {}
|
|
@@ -98,15 +100,21 @@ module Cosmos
|
|
|
98
100
|
@limits_set = :DEFAULT
|
|
99
101
|
@colorblind = false
|
|
100
102
|
@monitor_operational = true
|
|
103
|
+
@toggle_mode = false
|
|
101
104
|
request_reset()
|
|
102
105
|
end
|
|
103
106
|
|
|
104
107
|
# Request that the limits items be refreshed from the server
|
|
105
|
-
def request_reset
|
|
106
|
-
@toggle_mode = toggle_mode
|
|
108
|
+
def request_reset
|
|
107
109
|
@initialized = false
|
|
108
110
|
end
|
|
109
111
|
|
|
112
|
+
# Switch between realtime and replay modes
|
|
113
|
+
def toggle_mode
|
|
114
|
+
@toggle_mode = true
|
|
115
|
+
request_reset()
|
|
116
|
+
end
|
|
117
|
+
|
|
110
118
|
# Remove an item and optionally ignore it which means don't display it
|
|
111
119
|
# again if it goes out of limits and don't have it count towards the
|
|
112
120
|
# overall limit state. Still display its limits transitions in the log.
|
|
@@ -350,12 +358,16 @@ module Cosmos
|
|
|
350
358
|
@items = {}
|
|
351
359
|
@out_of_limits = []
|
|
352
360
|
@stale = []
|
|
353
|
-
@limits_set = get_limits_set()
|
|
354
361
|
unsubscribe_limits_events(@queue_id) if @queue_id
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
362
|
+
if @toggle_mode
|
|
363
|
+
set_replay_mode(!get_replay_mode())
|
|
364
|
+
@clear_log_callback.call
|
|
365
|
+
@toggle_mode = false
|
|
366
|
+
end
|
|
358
367
|
@clear_items_callback.call
|
|
368
|
+
|
|
369
|
+
@limits_set = get_limits_set()
|
|
370
|
+
@queue_id = subscribe_limits_events(100000)
|
|
359
371
|
get_out_of_limits().each do |target, packet, item, state|
|
|
360
372
|
limits_change(target, packet, item, state)
|
|
361
373
|
end
|
|
@@ -534,8 +546,8 @@ module Cosmos
|
|
|
534
546
|
initialize_central_widget()
|
|
535
547
|
complete_initialize()
|
|
536
548
|
|
|
537
|
-
@limits_items = LimitsItems.new(
|
|
538
|
-
method(:
|
|
549
|
+
@limits_items = LimitsItems.new(method(:new_gui_item), method(:update_gui_item), \
|
|
550
|
+
method(:clear_gui_items), method(:remove_gui_item), method(:clear_log))
|
|
539
551
|
if options.config_file
|
|
540
552
|
begin
|
|
541
553
|
result = @limits_items.open_config(options.config_file)
|
|
@@ -547,6 +559,7 @@ module Cosmos
|
|
|
547
559
|
|
|
548
560
|
limits_thread()
|
|
549
561
|
value_thread()
|
|
562
|
+
toggle_replay_mode() if options.replay
|
|
550
563
|
end
|
|
551
564
|
|
|
552
565
|
# Initialize all the actions in the application Menu
|
|
@@ -610,7 +623,6 @@ module Cosmos
|
|
|
610
623
|
# Layout the main GUI tab widget with a view of all the out of limits items
|
|
611
624
|
# in one tab and a log tab showing all limits events.
|
|
612
625
|
def initialize_central_widget
|
|
613
|
-
|
|
614
626
|
widget = Qt::Widget.new
|
|
615
627
|
layout = Qt::VBoxLayout.new(widget)
|
|
616
628
|
setCentralWidget(widget)
|
|
@@ -707,7 +719,7 @@ module Cosmos
|
|
|
707
719
|
end
|
|
708
720
|
|
|
709
721
|
def toggle_replay_mode
|
|
710
|
-
@limits_items.
|
|
722
|
+
@limits_items.toggle_mode()
|
|
711
723
|
end
|
|
712
724
|
|
|
713
725
|
# @return [String] Fully qualified path to the configuration file
|
|
@@ -815,9 +827,7 @@ module Cosmos
|
|
|
815
827
|
@limits_thread = Thread.new do
|
|
816
828
|
while true
|
|
817
829
|
break if @cancel_thread
|
|
818
|
-
|
|
819
|
-
result, color = @limits_items.process_events()
|
|
820
|
-
end
|
|
830
|
+
result, color = @limits_items.process_events()
|
|
821
831
|
if result
|
|
822
832
|
update_log(result, color)
|
|
823
833
|
else
|
|
@@ -877,6 +887,10 @@ module Cosmos
|
|
|
877
887
|
end
|
|
878
888
|
end
|
|
879
889
|
|
|
890
|
+
def clear_log
|
|
891
|
+
Qt.execute_in_main_thread(true) { @log_output.clear() }
|
|
892
|
+
end
|
|
893
|
+
|
|
880
894
|
# Remove a limits item from the list and optionally ignore
|
|
881
895
|
#
|
|
882
896
|
# @param widget [Qt::Widget] Widget to remove
|
|
@@ -999,12 +1013,12 @@ module Cosmos
|
|
|
999
1013
|
options.remember_geometry = false
|
|
1000
1014
|
options.title = "Limits Monitor"
|
|
1001
1015
|
options.auto_size = false
|
|
1002
|
-
options.config_file = nil
|
|
1003
1016
|
options.production = false
|
|
1004
1017
|
options.no_prompt = false
|
|
1005
1018
|
option_parser.separator "Limits Monitor Specific Options:"
|
|
1006
|
-
|
|
1007
|
-
|
|
1019
|
+
options.replay = false
|
|
1020
|
+
option_parser.on("--replay", "Start Limits Monitor in Replay mode") do
|
|
1021
|
+
options.replay = true
|
|
1008
1022
|
end
|
|
1009
1023
|
end
|
|
1010
1024
|
|
|
@@ -74,6 +74,7 @@ module Cosmos
|
|
|
74
74
|
update_tlm_items(item_name)
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
|
+
toggle_replay_mode() if options.replay
|
|
77
78
|
end
|
|
78
79
|
|
|
79
80
|
# Unconfigure CosmosConfig to interact with splash screen
|
|
@@ -587,7 +588,7 @@ module Cosmos
|
|
|
587
588
|
graph_action.statusTip = "Create a new COSMOS graph of #{target_name} #{packet_name} #{item_name}"
|
|
588
589
|
graph_action.connect(SIGNAL('triggered()')) do
|
|
589
590
|
@table.clearSelection
|
|
590
|
-
TlmGraphDialog.new(self, target_name, packet_name, item_name)
|
|
591
|
+
TlmGraphDialog.new(self, target_name, packet_name, item_name, get_replay_mode())
|
|
591
592
|
end
|
|
592
593
|
menu.addAction(graph_action)
|
|
593
594
|
|
|
@@ -628,12 +629,13 @@ module Cosmos
|
|
|
628
629
|
"Set the polling rate to PERIOD (unit seconds)") do |arg|
|
|
629
630
|
options.rate = Float(arg)
|
|
630
631
|
end
|
|
632
|
+
options.replay = false
|
|
633
|
+
option_parser.on("--replay", "Start Packet Viewer in Replay mode") do
|
|
634
|
+
options.replay = true
|
|
635
|
+
end
|
|
631
636
|
end
|
|
632
|
-
|
|
633
637
|
super(option_parser, options)
|
|
634
638
|
end
|
|
635
639
|
end
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
end # module Cosmos
|
|
640
|
+
end
|
|
641
|
+
end
|
|
@@ -26,6 +26,7 @@ module Cosmos
|
|
|
26
26
|
slots 'undo_available(bool)'
|
|
27
27
|
|
|
28
28
|
UNTITLED_TAB_TEXT = ' Untitled '
|
|
29
|
+
MAX_RECENT_FILES = 20
|
|
29
30
|
|
|
30
31
|
def initialize(options)
|
|
31
32
|
# All code before super is executed twice in RubyQt Based classes
|
|
@@ -50,7 +51,9 @@ module Cosmos
|
|
|
50
51
|
@no_icon = Qt::Icon.new
|
|
51
52
|
|
|
52
53
|
begin
|
|
53
|
-
ScriptRunnerConfig
|
|
54
|
+
# Always create the ScriptRunnerConfig but note that it's optional to pass a config file
|
|
55
|
+
# If the user doesn't have one it will be created automatically if the default config is changed
|
|
56
|
+
@config = ScriptRunnerConfig.new(options.config_file)
|
|
54
57
|
rescue => error
|
|
55
58
|
ExceptionDialog.new(self, error, "Error parsing #{options.config_file}")
|
|
56
59
|
end
|
|
@@ -95,13 +98,17 @@ module Cosmos
|
|
|
95
98
|
@file_new.statusTip = 'Start a new script'
|
|
96
99
|
@file_new.connect(SIGNAL('triggered()')) { file_new() }
|
|
97
100
|
|
|
101
|
+
@clear_file_open_recent = Qt::Action.new('&Clear Recent', self)
|
|
102
|
+
@clear_file_open_recent.statusTip = 'Clear the recently opened file list'
|
|
103
|
+
@clear_file_open_recent.connect(SIGNAL('triggered()')) { clear_file_open_recent() }
|
|
104
|
+
|
|
98
105
|
@file_close = Qt::Action.new('&Close', self)
|
|
99
106
|
@file_close_keyseq = Qt::KeySequence.new('Ctrl+W')
|
|
100
107
|
@file_close.shortcut = @file_close_keyseq
|
|
101
108
|
@file_close.statusTip = 'Close the script'
|
|
102
109
|
@file_close.connect(SIGNAL('triggered()')) { file_close() }
|
|
103
110
|
|
|
104
|
-
@file_reload = Qt::Action.new('&
|
|
111
|
+
@file_reload = Qt::Action.new('Re&load', self)
|
|
105
112
|
@file_reload_keyseq = Qt::KeySequence.new('Ctrl+R')
|
|
106
113
|
@file_reload.shortcut = @file_reload_keyseq
|
|
107
114
|
@file_reload.statusTip = 'Reload a script'
|
|
@@ -257,6 +264,13 @@ module Cosmos
|
|
|
257
264
|
@script_call_stack.connect(SIGNAL('triggered()')) { script_call_stack() }
|
|
258
265
|
@script_call_stack.setEnabled(false)
|
|
259
266
|
|
|
267
|
+
@script_error_backtrace = Qt::Action.new('Show Error Backtrace', self)
|
|
268
|
+
@script_error_backtrace.statusTip = 'Show Error Backtrace from the last encountered exception'
|
|
269
|
+
@script_error_backtrace.connect(SIGNAL('triggered()')) do
|
|
270
|
+
ScriptRunnerFrame.show_backtrace = @script_error_backtrace.checked?
|
|
271
|
+
end
|
|
272
|
+
@script_error_backtrace.setCheckable(true)
|
|
273
|
+
|
|
260
274
|
@script_debug = Qt::Action.new(Cosmos.get_icon('bug.png'), 'Toggle &Debug', self)
|
|
261
275
|
@script_debug_keyseq = Qt::KeySequence.new('Ctrl+D')
|
|
262
276
|
@script_debug.shortcut = @script_debug_keyseq
|
|
@@ -284,6 +298,20 @@ module Cosmos
|
|
|
284
298
|
@file_open.setIcon(Cosmos.get_icon('open.png'))
|
|
285
299
|
target_dirs_action(@file_open, System.paths['PROCEDURES'], 'procedures', method(:file_open))
|
|
286
300
|
|
|
301
|
+
@file_open_recent = @file_menu.addMenu('Open &Recent')
|
|
302
|
+
@file_open_recent.setIcon(Cosmos.get_icon('open.png'))
|
|
303
|
+
settings = Qt::Settings.new('Ball Aerospace', self.class.to_s)
|
|
304
|
+
if settings.contains('recent_files')
|
|
305
|
+
recent = settings.value('recent_files').toStringList()
|
|
306
|
+
recent.each do |filename|
|
|
307
|
+
action = Qt::Action.new(filename, self)
|
|
308
|
+
action.connect(SIGNAL('triggered()')) { open_filename(filename) }
|
|
309
|
+
@file_open_recent.addAction(action)
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
@file_open_recent.addSeparator()
|
|
313
|
+
@file_open_recent.addAction(@clear_file_open_recent)
|
|
314
|
+
|
|
287
315
|
@file_menu.addAction(@file_close)
|
|
288
316
|
@file_menu.addAction(@file_reload)
|
|
289
317
|
@file_menu.addSeparator()
|
|
@@ -334,6 +362,7 @@ module Cosmos
|
|
|
334
362
|
view_menu.addSeparator()
|
|
335
363
|
view_menu.addAction(@script_log_message)
|
|
336
364
|
view_menu.addAction(@script_call_stack)
|
|
365
|
+
view_menu.addAction(@script_error_backtrace)
|
|
337
366
|
view_menu.addAction(@script_debug)
|
|
338
367
|
view_menu.addAction(@script_disconnect)
|
|
339
368
|
|
|
@@ -409,35 +438,63 @@ module Cosmos
|
|
|
409
438
|
# File->Open
|
|
410
439
|
def file_open(filename = nil)
|
|
411
440
|
if File.directory?(filename)
|
|
412
|
-
|
|
441
|
+
filenames = Qt::FileDialog.getOpenFileNames(self, "Select Script(s)", filename, "Scripts (*.rb);;All Files(*.*)")
|
|
442
|
+
else
|
|
443
|
+
filenames = [filename]
|
|
413
444
|
end
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
return
|
|
423
|
-
end
|
|
445
|
+
filenames.compact!
|
|
446
|
+
return if filenames.nil? || filenames.empty?
|
|
447
|
+
filenames.each do |filename|
|
|
448
|
+
open_filename(filename)
|
|
449
|
+
|
|
450
|
+
found = false
|
|
451
|
+
@file_open_recent.actions.each do |action|
|
|
452
|
+
found = true if action.text == filename
|
|
424
453
|
end
|
|
454
|
+
next if found
|
|
455
|
+
action = Qt::Action.new(filename, self)
|
|
456
|
+
action.connect(SIGNAL('triggered()')) { open_filename(filename) }
|
|
457
|
+
@file_open_recent.insertAction(@file_open_recent.actions[0], action)
|
|
458
|
+
# Add 2 for the separator and Clear Recent action
|
|
459
|
+
if @file_open_recent.actions.length > (MAX_RECENT_FILES + 2)
|
|
460
|
+
@file_open_recent.removeAction(@file_open_recent.actions[-3]) # ignore last 2
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
def clear_file_open_recent
|
|
466
|
+
# Subtract 2 for the separator and Clear Recent action
|
|
467
|
+
(@file_open_recent.actions.length - 2).times do
|
|
468
|
+
@file_open_recent.removeAction(@file_open_recent.actions[0])
|
|
469
|
+
end
|
|
470
|
+
end
|
|
425
471
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
472
|
+
def open_filename(filename)
|
|
473
|
+
# If the user opens a file we already have open
|
|
474
|
+
# just set the current tab to that file and return
|
|
475
|
+
@tab_book.tabs.each_with_index do |tab, index|
|
|
476
|
+
if tab.filename == filename
|
|
477
|
+
@tab_book.setCurrentIndex(index)
|
|
430
478
|
@tab_book.currentTab.set_text_from_file(filename)
|
|
431
479
|
@tab_book.currentTab.filename = filename
|
|
432
|
-
|
|
433
|
-
else
|
|
434
|
-
create_tab(filename)
|
|
480
|
+
return
|
|
435
481
|
end
|
|
482
|
+
end
|
|
436
483
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
484
|
+
if ((@tab_book.count == 1) &&
|
|
485
|
+
@tab_book.currentTab.filename.empty? &&
|
|
486
|
+
!@tab_book.currentTab.modified)
|
|
487
|
+
# Active Tab is an unmodified Untitled so just open the file in it
|
|
488
|
+
@tab_book.currentTab.set_text_from_file(filename)
|
|
489
|
+
@tab_book.currentTab.filename = filename
|
|
490
|
+
@tab_book.setTabText(@tab_book.currentIndex, File.basename(filename))
|
|
491
|
+
else
|
|
492
|
+
create_tab(filename)
|
|
440
493
|
end
|
|
494
|
+
|
|
495
|
+
update_title()
|
|
496
|
+
@procedure_dir = File.dirname(filename)
|
|
497
|
+
@procedure_dir << '/' if @procedure_dir[-1..-1] != '/' and @procedure_dir[-1..-1] != '\\'
|
|
441
498
|
end
|
|
442
499
|
|
|
443
500
|
# File->Reload
|
|
@@ -565,6 +622,7 @@ module Cosmos
|
|
|
565
622
|
ScriptRunnerFrame.pause_on_error = (pause_on_error.checkState == Qt::Checked)
|
|
566
623
|
ScriptRunnerFrame.monitor_limits = (monitor.checkState == Qt::Checked)
|
|
567
624
|
ScriptRunnerFrame.pause_on_red = (pause_on_red.checkState == Qt::Checked)
|
|
625
|
+
@config.write_config
|
|
568
626
|
dialog.accept
|
|
569
627
|
end
|
|
570
628
|
cancel = Qt::PushButton.new('Cancel')
|
|
@@ -669,6 +727,10 @@ module Cosmos
|
|
|
669
727
|
def closeEvent(event)
|
|
670
728
|
if active_script_runner_frame().prompt_if_running_on_close()
|
|
671
729
|
if prompt_for_save_if_needed_on_close()
|
|
730
|
+
settings = Qt::Settings.new('Ball Aerospace', self.class.to_s)
|
|
731
|
+
recent_files = @file_open_recent.actions.collect {|action| action.text }
|
|
732
|
+
# Ignore the last 2 because of the separator and Clear Recent action
|
|
733
|
+
settings.setValue('recent_files', Qt::Variant.new(recent_files[0..-3]))
|
|
672
734
|
shutdown_cmd_tlm()
|
|
673
735
|
@tab_book.tabs.each_with_index do |tab, index|
|
|
674
736
|
tab.stop_message_log
|
|
@@ -986,9 +1048,6 @@ module Cosmos
|
|
|
986
1048
|
options.disconnect_mode = false
|
|
987
1049
|
|
|
988
1050
|
option_parser.separator "Script Runner Specific Options:"
|
|
989
|
-
option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
990
|
-
options.config_file = arg
|
|
991
|
-
end
|
|
992
1051
|
option_parser.on("-s", "--server FILE", "Use the specified server configuration file for disconnect mode") do |arg|
|
|
993
1052
|
options.server_config_file = arg
|
|
994
1053
|
end
|
|
@@ -1003,6 +1062,5 @@ module Cosmos
|
|
|
1003
1062
|
super(option_parser, options)
|
|
1004
1063
|
end
|
|
1005
1064
|
end
|
|
1006
|
-
end
|
|
1007
|
-
|
|
1008
|
-
end # module Cosmos
|
|
1065
|
+
end
|
|
1066
|
+
end
|
|
@@ -16,12 +16,16 @@ module Cosmos
|
|
|
16
16
|
# Processes the config file
|
|
17
17
|
def initialize(filename)
|
|
18
18
|
return unless filename
|
|
19
|
+
@filename = filename
|
|
19
20
|
parser = ConfigParser.new("http://cosmosrb.com/docs/tools/#script-runner-configuration")
|
|
20
21
|
parser.parse_file(filename) do |keyword, params|
|
|
21
22
|
case keyword
|
|
22
23
|
when 'LINE_DELAY'
|
|
23
24
|
parser.verify_num_parameters(1, 1, "#{keyword} <Delay in Seconds>")
|
|
24
25
|
ScriptRunnerFrame.line_delay = params[0].to_f
|
|
26
|
+
when 'PAUSE_ON_ERROR'
|
|
27
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <TRUE or FALSE>")
|
|
28
|
+
ScriptRunnerFrame.pause_on_error = ConfigParser.handle_true_false(params[0])
|
|
25
29
|
when 'MONITOR_LIMITS'
|
|
26
30
|
parser.verify_num_parameters(0, 0, keyword)
|
|
27
31
|
ScriptRunnerFrame.monitor_limits = true
|
|
@@ -35,5 +39,15 @@ module Cosmos
|
|
|
35
39
|
end
|
|
36
40
|
end
|
|
37
41
|
end
|
|
42
|
+
|
|
43
|
+
def write_config
|
|
44
|
+
@filename = File.join(Cosmos::USERPATH, 'config', 'tools', 'script_runner', 'script_runner.txt') unless @filename
|
|
45
|
+
File.open(@filename, 'w') do |file|
|
|
46
|
+
file.puts("LINE_DELAY #{ScriptRunnerFrame.line_delay}")
|
|
47
|
+
file.puts("PAUSE_ON_ERROR #{ScriptRunnerFrame.pause_on_error ? 'TRUE' : 'FALSE'}")
|
|
48
|
+
file.puts("MONITOR_LIMITS") if ScriptRunnerFrame.monitor_limits
|
|
49
|
+
file.puts("PAUSE_ON_RED") if ScriptRunnerFrame.pause_on_red
|
|
50
|
+
end
|
|
51
|
+
end
|
|
38
52
|
end
|
|
39
53
|
end
|
|
@@ -89,6 +89,9 @@ module Cosmos
|
|
|
89
89
|
SET_TLM_KEYWORDS = %w(set_tlm set_tlm_raw override_tlm_raw normalize_tlm_raw)
|
|
90
90
|
CHECK_KEYWORDS = %w(check check_raw wait wait_raw wait_check wait_check_raw)
|
|
91
91
|
|
|
92
|
+
INSTANCE_VARS = %w(__return_val close_on_complete error eval_error filename instrumented_script \
|
|
93
|
+
line_number line_offset saved_instance saved_run_thread text text_binding uncaught_exception)
|
|
94
|
+
|
|
92
95
|
attr_accessor :use_instrumentation
|
|
93
96
|
attr_accessor :change_callback
|
|
94
97
|
attr_accessor :run_callback
|
|
@@ -569,10 +572,14 @@ module Cosmos
|
|
|
569
572
|
return nil if @cancel_instrumentation
|
|
570
573
|
instrumented_line = ''
|
|
571
574
|
if instrumentable
|
|
572
|
-
#
|
|
573
|
-
#
|
|
575
|
+
# Add a newline if it's empty to ensure the instrumented code has
|
|
576
|
+
# the same number of lines as the original script. Note that the
|
|
577
|
+
# segment could have originally had comments but they were stripped in
|
|
574
578
|
# ruby_lex_utils.remove_comments
|
|
575
|
-
|
|
579
|
+
if segment.strip.empty?
|
|
580
|
+
instrumented_text << "\n"
|
|
581
|
+
next
|
|
582
|
+
end
|
|
576
583
|
|
|
577
584
|
# Create a variable to hold the segment's return value
|
|
578
585
|
instrumented_line << "__return_val = nil; "
|
|
@@ -671,7 +678,7 @@ module Cosmos
|
|
|
671
678
|
def exception_instrumentation(error, filename, line_number)
|
|
672
679
|
if error.class == StopScript || error.class == SkipTestCase || !@use_instrumentation
|
|
673
680
|
Kernel.raise error
|
|
674
|
-
|
|
681
|
+
elsif !error.eql?(@@error)
|
|
675
682
|
line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
|
|
676
683
|
handle_exception(error, false, filename, line_number)
|
|
677
684
|
end
|
|
@@ -962,6 +969,10 @@ module Cosmos
|
|
|
962
969
|
end
|
|
963
970
|
|
|
964
971
|
if @script_binding
|
|
972
|
+
# Check for accessing an instance variable or local
|
|
973
|
+
if debug_text =~ /^@\S+$/ || @script_binding.local_variables.include?(debug_text.to_sym)
|
|
974
|
+
debug_text = "puts #{debug_text}" # Automatically add puts to print it
|
|
975
|
+
end
|
|
965
976
|
eval(debug_text, @script_binding, 'debug', 1)
|
|
966
977
|
else
|
|
967
978
|
Object.class_eval(debug_text, 'debug', 1)
|
|
@@ -999,9 +1010,21 @@ module Cosmos
|
|
|
999
1010
|
@debug_text.setPlainText("")
|
|
1000
1011
|
end
|
|
1001
1012
|
end
|
|
1002
|
-
|
|
1003
1013
|
@debug_frame.addWidget(@debug_text)
|
|
1004
1014
|
|
|
1015
|
+
@locals_button = Qt::PushButton.new('Locals')
|
|
1016
|
+
@locals_button.connect(SIGNAL('clicked(bool)')) do
|
|
1017
|
+
next unless @script_binding
|
|
1018
|
+
@locals_button.setEnabled(false)
|
|
1019
|
+
vars = @script_binding.local_variables.map(&:to_s)
|
|
1020
|
+
puts "Locals: #{vars.reject {|x| INSTANCE_VARS.include?(x)}.sort.join(', ')}"
|
|
1021
|
+
while @output_io.string[-1..-1] == "\n"
|
|
1022
|
+
Qt::CoreApplication.processEvents()
|
|
1023
|
+
end
|
|
1024
|
+
@locals_button.setEnabled(true)
|
|
1025
|
+
end
|
|
1026
|
+
@debug_frame.addWidget(@locals_button)
|
|
1027
|
+
|
|
1005
1028
|
@bottom_frame.layout.addLayout(@debug_frame)
|
|
1006
1029
|
end
|
|
1007
1030
|
end
|
|
@@ -1375,7 +1398,13 @@ module Cosmos
|
|
|
1375
1398
|
$stdout.add_stream(@output_io)
|
|
1376
1399
|
$stderr.add_stream(@output_io)
|
|
1377
1400
|
|
|
1378
|
-
|
|
1401
|
+
unless close_on_complete
|
|
1402
|
+
scriptrunner_puts("Starting script: #{File.basename(@filename)}")
|
|
1403
|
+
targets = get_disconnected_targets()
|
|
1404
|
+
if targets
|
|
1405
|
+
scriptrunner_puts("DISCONNECTED targets: #{targets.join(',')}")
|
|
1406
|
+
end
|
|
1407
|
+
end
|
|
1379
1408
|
handle_output_io()
|
|
1380
1409
|
|
|
1381
1410
|
# Start Limits Monitoring
|
|
@@ -1685,7 +1714,12 @@ module Cosmos
|
|
|
1685
1714
|
if cached
|
|
1686
1715
|
@active_script.setPlainText(cached.gsub("\r", ''))
|
|
1687
1716
|
else
|
|
1688
|
-
|
|
1717
|
+
if File.exist?(filename)
|
|
1718
|
+
data = File.read(filename).gsub("\r", '')
|
|
1719
|
+
else
|
|
1720
|
+
data = ""
|
|
1721
|
+
end
|
|
1722
|
+
@active_script.setPlainText(data)
|
|
1689
1723
|
end
|
|
1690
1724
|
mark_breakpoints(filename)
|
|
1691
1725
|
|