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