cosmos 4.2.4-java → 4.3.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/.travis.yml +1 -1
- data/Gemfile +1 -1
- data/Manifest.txt +12 -0
- data/autohotkey/tools/cmd_sequence.ahk +21 -20
- data/autohotkey/tools/cmd_sequence2.ahk +1 -1
- data/autohotkey/tools/config_editor.ahk +1 -1
- data/autohotkey/tools/launcher.ahk +1 -0
- data/autohotkey/tools/packet_viewer.ahk +6 -5
- data/autohotkey/tools/test_runner.ahk +8 -8
- data/bin/cosmos +37 -0
- data/bin/dart_util +0 -0
- data/data/config/item_modifiers.yaml +9 -0
- data/data/crc.txt +91 -86
- data/demo/Rakefile +2 -0
- data/demo/config/dart/Gemfile +1 -1
- data/demo/config/data/crc.txt +8 -5
- data/demo/config/system/system.txt +28 -0
- data/demo/config/system/system2.txt +21 -3
- data/demo/config/system/system_alt_ports.txt +69 -0
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
- data/demo/procedures/cosmos_api_test.rb +18 -14
- data/demo/procedures/local_screen_example.rb +51 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
- data/ext/cosmos/ext/packet/packet.c +6 -0
- data/ext/mkrf_conf.rb +2 -2
- data/install/config/dart/Gemfile +1 -1
- data/install/config/data/crc.txt +2 -2
- data/install/config/system/system.txt +23 -1
- data/lib/cosmos/conversions.rb +2 -0
- data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
- data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
- data/lib/cosmos/dart/Gemfile +1 -1
- data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
- data/lib/cosmos/dart/lib/dart_common.rb +1 -1
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
- data/lib/cosmos/dart/lib/dart_decommutator.rb +4 -4
- data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
- data/lib/cosmos/dart/processes/dart_ingester.rb +2 -0
- data/lib/cosmos/dart/processes/dart_util.rb +4 -4
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
- data/lib/cosmos/gui/dialogs/details_dialog.rb +29 -29
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +10 -10
- data/lib/cosmos/gui/qt.rb +10 -1
- data/lib/cosmos/gui/qt_tool.rb +17 -10
- data/lib/cosmos/gui/text/ruby_editor.rb +47 -8
- data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +26 -0
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/interface.rb +4 -0
- data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
- data/lib/cosmos/packet_logs/packet_log_reader.rb +69 -26
- data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
- data/lib/cosmos/packets/commands.rb +5 -1
- data/lib/cosmos/packets/packet.rb +36 -2
- data/lib/cosmos/packets/packet_config.rb +0 -1
- data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_parser.rb +1 -1
- data/lib/cosmos/packets/telemetry.rb +4 -0
- data/lib/cosmos/script/api_shared.rb +2 -0
- data/lib/cosmos/script/limits.rb +4 -0
- data/lib/cosmos/script/script.rb +27 -11
- data/lib/cosmos/script/telemetry.rb +3 -1
- data/lib/cosmos/script/tools.rb +18 -8
- data/lib/cosmos/system/system.rb +21 -0
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +26 -24
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +29 -29
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +65 -40
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +6 -6
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +12 -9
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +7 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +4 -4
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
- data/lib/cosmos/tools/config_editor/config_editor.rb +69 -69
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +42 -38
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +1 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +4 -4
- data/lib/cosmos/tools/launcher/launcher.rb +1 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +28 -24
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +56 -53
- data/lib/cosmos/tools/script_runner/script_runner.rb +112 -95
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +48 -30
- data/lib/cosmos/tools/table_manager/table_manager.rb +42 -42
- data/lib/cosmos/tools/test_runner/test_runner.rb +45 -27
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +3 -3
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +45 -45
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +4 -4
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +83 -83
- data/lib/cosmos/tools/tlm_viewer/screen.rb +73 -13
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +15 -15
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +6 -1
- data/lib/cosmos/top_level.rb +14 -1
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +63 -12
- data/make_gems.sh +10 -0
- data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
- data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
- data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
- data/spec/io/serial_driver_spec.rb +15 -13
- data/spec/packet_logs/packet_log_reader_spec.rb +72 -17
- data/spec/packets/packet_config_spec.rb +5 -16
- data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
- data/spec/packets/parsers/macro_parser_spec.rb +36 -36
- data/spec/packets/parsers/state_parser_spec.rb +36 -0
- data/spec/packets/telemetry_spec.rb +11 -9
- data/spec/script/script_spec.rb +2 -3
- data/spec/script/scripting_spec.rb +2 -1
- data/spec/script/tools_spec.rb +0 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +28 -20
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
- data/tasks/gemfile_stats.rake +3 -2
- metadata +14 -2
|
@@ -89,185 +89,198 @@ module Cosmos
|
|
|
89
89
|
super()
|
|
90
90
|
|
|
91
91
|
# File actions
|
|
92
|
-
@file_new = Qt::Action.new(Cosmos.get_icon('file.png'),
|
|
93
|
-
@file_new_keyseq = Qt::KeySequence.new(
|
|
92
|
+
@file_new = Qt::Action.new(Cosmos.get_icon('file.png'), '&New', self)
|
|
93
|
+
@file_new_keyseq = Qt::KeySequence.new('Ctrl+N')
|
|
94
94
|
@file_new.shortcut = @file_new_keyseq
|
|
95
|
-
@file_new.statusTip =
|
|
95
|
+
@file_new.statusTip = 'Start a new script'
|
|
96
96
|
@file_new.connect(SIGNAL('triggered()')) { file_new() }
|
|
97
97
|
|
|
98
|
-
@file_close = Qt::Action.new(
|
|
99
|
-
@file_close_keyseq = Qt::KeySequence.new(
|
|
98
|
+
@file_close = Qt::Action.new('&Close', self)
|
|
99
|
+
@file_close_keyseq = Qt::KeySequence.new('Ctrl+W')
|
|
100
100
|
@file_close.shortcut = @file_close_keyseq
|
|
101
|
-
@file_close.statusTip =
|
|
101
|
+
@file_close.statusTip = 'Close the script'
|
|
102
102
|
@file_close.connect(SIGNAL('triggered()')) { file_close() }
|
|
103
103
|
|
|
104
|
-
@file_reload = Qt::Action.new(
|
|
105
|
-
@file_reload_keyseq = Qt::KeySequence.new(
|
|
104
|
+
@file_reload = Qt::Action.new('&Reload', self)
|
|
105
|
+
@file_reload_keyseq = Qt::KeySequence.new('Ctrl+R')
|
|
106
106
|
@file_reload.shortcut = @file_reload_keyseq
|
|
107
|
-
@file_reload.statusTip =
|
|
107
|
+
@file_reload.statusTip = 'Reload a script'
|
|
108
108
|
@file_reload.connect(SIGNAL('triggered()')) { file_reload() }
|
|
109
109
|
|
|
110
|
-
@file_save = Qt::Action.new(Cosmos.get_icon('save.png'),
|
|
111
|
-
@file_save_keyseq = Qt::KeySequence.new(
|
|
110
|
+
@file_save = Qt::Action.new(Cosmos.get_icon('save.png'), '&Save', self)
|
|
111
|
+
@file_save_keyseq = Qt::KeySequence.new('Ctrl+S')
|
|
112
112
|
@file_save.shortcut = @file_save_keyseq
|
|
113
|
-
@file_save.statusTip =
|
|
113
|
+
@file_save.statusTip = 'Save the script'
|
|
114
114
|
@file_save.connect(SIGNAL('triggered()')) { file_save(false) }
|
|
115
115
|
|
|
116
|
-
@file_save_as = Qt::Action.new(Cosmos.get_icon('save_as.png'),
|
|
117
|
-
@file_save_as.statusTip =
|
|
116
|
+
@file_save_as = Qt::Action.new(Cosmos.get_icon('save_as.png'), 'Save &As', self)
|
|
117
|
+
@file_save_as.statusTip = 'Save the script'
|
|
118
118
|
@file_save_as.connect(SIGNAL('triggered()')) { file_save(true) }
|
|
119
119
|
|
|
120
|
-
@file_options = Qt::Action.new(
|
|
121
|
-
@file_options.statusTip =
|
|
120
|
+
@file_options = Qt::Action.new('O&ptions', self)
|
|
121
|
+
@file_options.statusTip = 'Application Options'
|
|
122
122
|
@file_options.connect(SIGNAL('triggered()')) { file_options() }
|
|
123
123
|
|
|
124
124
|
# Edit actions
|
|
125
|
-
@edit_undo = Qt::Action.new(Cosmos.get_icon('undo.png'),
|
|
126
|
-
@edit_undo_keyseq = Qt::KeySequence.new(
|
|
125
|
+
@edit_undo = Qt::Action.new(Cosmos.get_icon('undo.png'), '&Undo', self)
|
|
126
|
+
@edit_undo_keyseq = Qt::KeySequence.new('Ctrl+Z')
|
|
127
127
|
@edit_undo.shortcut = @edit_undo_keyseq
|
|
128
|
-
@edit_undo.statusTip =
|
|
128
|
+
@edit_undo.statusTip = 'Undo'
|
|
129
129
|
@edit_undo.connect(SIGNAL('triggered()')) { active_script_runner_frame().undo }
|
|
130
130
|
|
|
131
|
-
@edit_redo = Qt::Action.new(Cosmos.get_icon('redo.png'),
|
|
132
|
-
@edit_redo_keyseq = Qt::KeySequence.new(
|
|
131
|
+
@edit_redo = Qt::Action.new(Cosmos.get_icon('redo.png'), '&Redo', self)
|
|
132
|
+
@edit_redo_keyseq = Qt::KeySequence.new('Ctrl+Y')
|
|
133
133
|
@edit_redo.shortcut = @edit_redo_keyseq
|
|
134
|
-
@edit_redo.statusTip =
|
|
134
|
+
@edit_redo.statusTip = 'Redo'
|
|
135
135
|
@edit_redo.connect(SIGNAL('triggered()')) { active_script_runner_frame().redo }
|
|
136
136
|
|
|
137
|
-
@edit_cut = Qt::Action.new(Cosmos.get_icon('cut.png'),
|
|
138
|
-
@edit_cut_keyseq = Qt::KeySequence.new(
|
|
137
|
+
@edit_cut = Qt::Action.new(Cosmos.get_icon('cut.png'), 'Cu&t', self)
|
|
138
|
+
@edit_cut_keyseq = Qt::KeySequence.new('Ctrl+X')
|
|
139
139
|
@edit_cut.shortcut = @edit_cut_keyseq
|
|
140
|
-
@edit_cut.statusTip =
|
|
140
|
+
@edit_cut.statusTip = 'Cut'
|
|
141
141
|
@edit_cut.connect(SIGNAL('triggered()')) { active_script_runner_frame().cut }
|
|
142
142
|
|
|
143
|
-
@edit_copy = Qt::Action.new(Cosmos.get_icon('copy.png'),
|
|
144
|
-
@edit_copy_keyseq = Qt::KeySequence.new(
|
|
143
|
+
@edit_copy = Qt::Action.new(Cosmos.get_icon('copy.png'), '&Copy', self)
|
|
144
|
+
@edit_copy_keyseq = Qt::KeySequence.new('Ctrl+C')
|
|
145
145
|
@edit_copy.shortcut = @edit_copy_keyseq
|
|
146
|
-
@edit_copy.statusTip =
|
|
146
|
+
@edit_copy.statusTip = 'Copy'
|
|
147
147
|
@edit_copy.connect(SIGNAL('triggered()')) { active_script_runner_frame().copy }
|
|
148
148
|
|
|
149
|
-
@edit_paste = Qt::Action.new(
|
|
150
|
-
@edit_paste_keyseq = Qt::KeySequence.new(
|
|
149
|
+
@edit_paste = Qt::Action.new('&Paste', self)
|
|
150
|
+
@edit_paste_keyseq = Qt::KeySequence.new('Ctrl+V')
|
|
151
151
|
@edit_paste.shortcut = @edit_paste_keyseq
|
|
152
|
-
@edit_paste.statusTip =
|
|
152
|
+
@edit_paste.statusTip = 'Paste'
|
|
153
153
|
@edit_paste.connect(SIGNAL('triggered()')) { active_script_runner_frame().paste }
|
|
154
154
|
|
|
155
|
-
@edit_select_all = Qt::Action.new(
|
|
156
|
-
@edit_select_all_keyseq = Qt::KeySequence.new(
|
|
155
|
+
@edit_select_all = Qt::Action.new('Select &All', self)
|
|
156
|
+
@edit_select_all_keyseq = Qt::KeySequence.new('Ctrl+A')
|
|
157
157
|
@edit_select_all.shortcut = @edit_select_all_keyseq
|
|
158
|
-
@edit_select_all.statusTip =
|
|
158
|
+
@edit_select_all.statusTip = 'Select All'
|
|
159
159
|
@edit_select_all.connect(SIGNAL('triggered()')) { active_script_runner_frame().select_all }
|
|
160
160
|
|
|
161
|
-
@edit_comment = Qt::Action.new(
|
|
162
|
-
@edit_comment_keyseq = Qt::KeySequence.new(
|
|
161
|
+
@edit_comment = Qt::Action.new('Comment/Uncomment &Lines', self)
|
|
162
|
+
@edit_comment_keyseq = Qt::KeySequence.new('Ctrl+K')
|
|
163
163
|
@edit_comment.shortcut = @edit_comment_keyseq
|
|
164
|
-
@edit_comment.statusTip =
|
|
164
|
+
@edit_comment.statusTip = 'Comment/Uncomment Lines'
|
|
165
165
|
@edit_comment.connect(SIGNAL('triggered()')) { active_script_runner_frame().comment_or_uncomment_lines }
|
|
166
166
|
|
|
167
|
+
@edit_zoom_in = Qt::Action.new('&Increase Font Size', self)
|
|
168
|
+
@edit_zoom_in_keyseq = Qt::KeySequence.new(Qt::KeySequence::ZoomIn)
|
|
169
|
+
@edit_zoom_in.shortcut = @edit_zoom_in_keyseq
|
|
170
|
+
@edit_zoom_in.connect(SIGNAL('triggered()')) { active_script_runner_frame().zoom_in }
|
|
171
|
+
|
|
172
|
+
@edit_zoom_out = Qt::Action.new('&Decrease Font Size', self)
|
|
173
|
+
@edit_zoom_out_keyseq = Qt::KeySequence.new(Qt::KeySequence::ZoomOut)
|
|
174
|
+
@edit_zoom_out.shortcut = @edit_zoom_out_keyseq
|
|
175
|
+
@edit_zoom_out.connect(SIGNAL('triggered()')) { active_script_runner_frame().zoom_out }
|
|
176
|
+
|
|
177
|
+
@edit_zoom_default = Qt::Action.new('Restore &Font Size', self)
|
|
178
|
+
@edit_zoom_default.connect(SIGNAL('triggered()')) { active_script_runner_frame().zoom_default }
|
|
179
|
+
|
|
167
180
|
# Search Actions
|
|
168
|
-
@search_find = Qt::Action.new(Cosmos.get_icon('search.png'),
|
|
169
|
-
@search_find_keyseq = Qt::KeySequence.new(
|
|
181
|
+
@search_find = Qt::Action.new(Cosmos.get_icon('search.png'), '&Find', self)
|
|
182
|
+
@search_find_keyseq = Qt::KeySequence.new('Ctrl+F')
|
|
170
183
|
@search_find.shortcut = @search_find_keyseq
|
|
171
|
-
@search_find.statusTip =
|
|
184
|
+
@search_find.statusTip = 'Find text'
|
|
172
185
|
@search_find.connect(SIGNAL('triggered()')) do
|
|
173
186
|
FindReplaceDialog.show_find(self)
|
|
174
187
|
end
|
|
175
188
|
|
|
176
|
-
@search_find_next = Qt::Action.new(
|
|
177
|
-
@search_find_next_keyseq = Qt::KeySequence.new(
|
|
189
|
+
@search_find_next = Qt::Action.new('Find &Next', self)
|
|
190
|
+
@search_find_next_keyseq = Qt::KeySequence.new('F3')
|
|
178
191
|
@search_find_next.shortcut = @search_find_next_keyseq
|
|
179
|
-
@search_find_next.statusTip =
|
|
192
|
+
@search_find_next.statusTip = 'Find next instance'
|
|
180
193
|
@search_find_next.connect(SIGNAL('triggered()')) do
|
|
181
194
|
FindReplaceDialog.find_next(self)
|
|
182
195
|
end
|
|
183
196
|
|
|
184
|
-
@search_find_previous = Qt::Action.new(
|
|
185
|
-
@search_find_previous_keyseq = Qt::KeySequence.new(
|
|
197
|
+
@search_find_previous = Qt::Action.new('Find &Previous', self)
|
|
198
|
+
@search_find_previous_keyseq = Qt::KeySequence.new('Shift+F3')
|
|
186
199
|
@search_find_previous.shortcut = @search_find_previous_keyseq
|
|
187
|
-
@search_find_previous.statusTip =
|
|
200
|
+
@search_find_previous.statusTip = 'Find previous instance'
|
|
188
201
|
@search_find_previous.connect(SIGNAL('triggered()')) do
|
|
189
202
|
FindReplaceDialog.find_previous(self)
|
|
190
203
|
end
|
|
191
204
|
|
|
192
|
-
@search_replace = Qt::Action.new(
|
|
193
|
-
@search_replace_keyseq = Qt::KeySequence.new(
|
|
205
|
+
@search_replace = Qt::Action.new('&Replace', self)
|
|
206
|
+
@search_replace_keyseq = Qt::KeySequence.new('Ctrl+H')
|
|
194
207
|
@search_replace.shortcut = @search_replace_keyseq
|
|
195
|
-
@search_replace.statusTip =
|
|
208
|
+
@search_replace.statusTip = 'Replace'
|
|
196
209
|
@search_replace.connect(SIGNAL('triggered()')) do
|
|
197
210
|
FindReplaceDialog.show_replace(self)
|
|
198
211
|
end
|
|
199
212
|
|
|
200
213
|
# Script Actions
|
|
201
|
-
@script_syntax_all = Qt::Action.new(
|
|
202
|
-
@script_syntax_all.statusTip =
|
|
214
|
+
@script_syntax_all = Qt::Action.new('&Ruby Syntax Check', self)
|
|
215
|
+
@script_syntax_all.statusTip = 'Check ruby syntax of this script'
|
|
203
216
|
@script_syntax_all.connect(SIGNAL('triggered()')) do
|
|
204
217
|
active_script_runner_frame().ruby_syntax_check_text()
|
|
205
218
|
end
|
|
206
219
|
|
|
207
|
-
@script_mnemonic_all = Qt::Action.new(
|
|
208
|
-
@script_mnemonic_all.statusTip =
|
|
220
|
+
@script_mnemonic_all = Qt::Action.new('&Mnemonic Check', self)
|
|
221
|
+
@script_mnemonic_all.statusTip = 'Check mnemonics of this script'
|
|
209
222
|
@script_mnemonic_all.connect(SIGNAL('triggered()')) do
|
|
210
223
|
active_script_runner_frame().mnemonic_check_text(active_script_runner_frame().text)
|
|
211
224
|
end
|
|
212
225
|
|
|
213
|
-
@script_execute_lines = Qt::Action.new(
|
|
214
|
-
@script_execute_lines.statusTip =
|
|
226
|
+
@script_execute_lines = Qt::Action.new('&Execute Selected Lines', self)
|
|
227
|
+
@script_execute_lines.statusTip = 'Execute selected lines'
|
|
215
228
|
@script_execute_lines.connect(SIGNAL('triggered()')) { active_script_runner_frame().run_selection }
|
|
216
229
|
|
|
217
|
-
@script_execute_cursor = Qt::Action.new(
|
|
218
|
-
@script_execute_cursor.statusTip =
|
|
230
|
+
@script_execute_cursor = Qt::Action.new('E&xecute From Cursor', self)
|
|
231
|
+
@script_execute_cursor.statusTip = 'Execute from cursor position'
|
|
219
232
|
@script_execute_cursor.connect(SIGNAL('triggered()')) { active_script_runner_frame().run_from_cursor }
|
|
220
233
|
|
|
221
|
-
@script_syntax_lines = Qt::Action.new(
|
|
222
|
-
@script_syntax_lines.statusTip =
|
|
234
|
+
@script_syntax_lines = Qt::Action.new('Ruby &Syntax Check Selected Lines', self)
|
|
235
|
+
@script_syntax_lines.statusTip = 'Check ruby syntax of selected lines'
|
|
223
236
|
@script_syntax_lines.connect(SIGNAL('triggered()')) { active_script_runner_frame().ruby_syntax_check_selection }
|
|
224
237
|
|
|
225
|
-
@script_mnemonic_lines = Qt::Action.new(
|
|
226
|
-
@script_mnemonic_lines.statusTip =
|
|
238
|
+
@script_mnemonic_lines = Qt::Action.new('M&nemonic Check Selected Lines', self)
|
|
239
|
+
@script_mnemonic_lines.statusTip = 'Check mnemonics of selected lines'
|
|
227
240
|
@script_mnemonic_lines.connect(SIGNAL('triggered()')) { active_script_runner_frame().mnemonic_check_selection }
|
|
228
241
|
|
|
229
|
-
@script_audit = Qt::Action.new(
|
|
230
|
-
@script_audit.statusTip =
|
|
242
|
+
@script_audit = Qt::Action.new('&Generate Cmd/Tlm Audit', self)
|
|
243
|
+
@script_audit.statusTip = 'Generate audit about commands sent and telemetry checked'
|
|
231
244
|
@script_audit.connect(SIGNAL('triggered()')) { script_audit() }
|
|
232
245
|
|
|
233
|
-
@script_instrumented = Qt::Action.new(
|
|
234
|
-
@script_instrumented.statusTip =
|
|
246
|
+
@script_instrumented = Qt::Action.new('&View Instrumented Script', self)
|
|
247
|
+
@script_instrumented.statusTip = 'View instrumented script'
|
|
235
248
|
@script_instrumented.connect(SIGNAL('triggered()')) { script_view_instrumented() }
|
|
236
249
|
|
|
237
|
-
@script_log_message = Qt::Action.new(
|
|
238
|
-
@script_log_message.statusTip =
|
|
250
|
+
@script_log_message = Qt::Action.new('Log Message to Script Log', self)
|
|
251
|
+
@script_log_message.statusTip = 'Log Message to Script Log'
|
|
239
252
|
@script_log_message.connect(SIGNAL('triggered()')) { script_log_message() }
|
|
240
253
|
@script_log_message.setEnabled(false)
|
|
241
254
|
|
|
242
|
-
@script_call_stack = Qt::Action.new(
|
|
243
|
-
@script_call_stack.statusTip =
|
|
255
|
+
@script_call_stack = Qt::Action.new('Show Call Stack', self)
|
|
256
|
+
@script_call_stack.statusTip = 'Show Call Stack'
|
|
244
257
|
@script_call_stack.connect(SIGNAL('triggered()')) { script_call_stack() }
|
|
245
258
|
@script_call_stack.setEnabled(false)
|
|
246
259
|
|
|
247
|
-
@script_debug = Qt::Action.new(Cosmos.get_icon('bug.png'),
|
|
248
|
-
@script_debug_keyseq = Qt::KeySequence.new(
|
|
260
|
+
@script_debug = Qt::Action.new(Cosmos.get_icon('bug.png'), 'Toggle &Debug', self)
|
|
261
|
+
@script_debug_keyseq = Qt::KeySequence.new('Ctrl+D')
|
|
249
262
|
@script_debug.shortcut = @script_debug_keyseq
|
|
250
|
-
@script_debug.statusTip =
|
|
263
|
+
@script_debug.statusTip = 'Toggle debug capabilities for the script'
|
|
251
264
|
@script_debug.connect(SIGNAL('triggered()')) { script_toggle_debug() }
|
|
252
265
|
|
|
253
|
-
@script_disconnect = Qt::Action.new(Cosmos.get_icon('disconnected.png'),
|
|
254
|
-
@script_disconnect_keyseq = Qt::KeySequence.new(
|
|
266
|
+
@script_disconnect = Qt::Action.new(Cosmos.get_icon('disconnected.png'), '&Toggle Disconnect', self)
|
|
267
|
+
@script_disconnect_keyseq = Qt::KeySequence.new('Ctrl+T')
|
|
255
268
|
@script_disconnect.shortcut = @script_disconnect_keyseq
|
|
256
|
-
@script_disconnect.statusTip =
|
|
269
|
+
@script_disconnect.statusTip = 'Toggle disconnect from the server'
|
|
257
270
|
@script_disconnect.connect(SIGNAL('triggered()')) { script_toggle_disconnect() }
|
|
258
271
|
end
|
|
259
272
|
|
|
260
273
|
def initialize_menus
|
|
261
274
|
# File Menu
|
|
262
|
-
@file_menu = menuBar.addMenu(
|
|
275
|
+
@file_menu = menuBar.addMenu('&File')
|
|
263
276
|
@file_menu.addAction(@file_new)
|
|
264
277
|
|
|
265
278
|
open_action = Qt::Action.new(self)
|
|
266
|
-
open_action.shortcut = Qt::KeySequence.new(
|
|
279
|
+
open_action.shortcut = Qt::KeySequence.new('Ctrl+O')
|
|
267
280
|
open_action.connect(SIGNAL('triggered()')) { file_open(@procedure_dir) }
|
|
268
281
|
self.addAction(open_action)
|
|
269
282
|
|
|
270
|
-
@file_open = @file_menu.addMenu(
|
|
283
|
+
@file_open = @file_menu.addMenu('&Open')
|
|
271
284
|
@file_open.setIcon(Cosmos.get_icon('open.png'))
|
|
272
285
|
target_dirs_action(@file_open, System.paths['PROCEDURES'], 'procedures', method(:file_open))
|
|
273
286
|
|
|
@@ -282,7 +295,7 @@ module Cosmos
|
|
|
282
295
|
@file_menu.addAction(@exit_action)
|
|
283
296
|
|
|
284
297
|
# Edit Menu
|
|
285
|
-
mode_menu = menuBar.addMenu(
|
|
298
|
+
mode_menu = menuBar.addMenu('&Edit')
|
|
286
299
|
mode_menu.addAction(@edit_undo)
|
|
287
300
|
mode_menu.addAction(@edit_redo)
|
|
288
301
|
mode_menu.addSeparator()
|
|
@@ -293,16 +306,20 @@ module Cosmos
|
|
|
293
306
|
mode_menu.addAction(@edit_select_all)
|
|
294
307
|
mode_menu.addSeparator()
|
|
295
308
|
mode_menu.addAction(@edit_comment)
|
|
309
|
+
mode_menu.addSeparator()
|
|
310
|
+
mode_menu.addAction(@edit_zoom_in)
|
|
311
|
+
mode_menu.addAction(@edit_zoom_out)
|
|
312
|
+
mode_menu.addAction(@edit_zoom_default)
|
|
296
313
|
|
|
297
314
|
# Search Menu
|
|
298
|
-
view_menu = menuBar.addMenu(
|
|
315
|
+
view_menu = menuBar.addMenu('&Search')
|
|
299
316
|
view_menu.addAction(@search_find)
|
|
300
317
|
view_menu.addAction(@search_find_next)
|
|
301
318
|
view_menu.addAction(@search_find_previous)
|
|
302
319
|
view_menu.addAction(@search_replace)
|
|
303
320
|
|
|
304
321
|
# Script Menu
|
|
305
|
-
view_menu = menuBar.addMenu(
|
|
322
|
+
view_menu = menuBar.addMenu('Scrip&t')
|
|
306
323
|
view_menu.addAction(@script_syntax_all)
|
|
307
324
|
view_menu.addAction(@script_syntax_lines)
|
|
308
325
|
view_menu.addSeparator()
|
|
@@ -472,11 +489,11 @@ module Cosmos
|
|
|
472
489
|
File.open(filename, "w") {|file| file.write(active_script_runner_frame().text)}
|
|
473
490
|
saved = true
|
|
474
491
|
update_title()
|
|
475
|
-
statusBar.showMessage(
|
|
492
|
+
statusBar.showMessage("#{filename} saved")
|
|
476
493
|
@procedure_dir = File.dirname(filename)
|
|
477
494
|
@procedure_dir << '/' if @procedure_dir[-1..-1] != '/' and @procedure_dir[-1..-1] != '\\'
|
|
478
495
|
rescue => error
|
|
479
|
-
statusBar.showMessage(
|
|
496
|
+
statusBar.showMessage("Error Saving Script : #{error.class} : #{error.message}")
|
|
480
497
|
end
|
|
481
498
|
end
|
|
482
499
|
|
|
@@ -508,18 +525,18 @@ module Cosmos
|
|
|
508
525
|
box = Qt::DoubleSpinBox.new
|
|
509
526
|
box.setRange(0, 60)
|
|
510
527
|
box.setValue(ScriptRunnerFrame.line_delay)
|
|
511
|
-
form.addRow(
|
|
528
|
+
form.addRow("&Delay between each script line:", box)
|
|
512
529
|
pause_on_error = Qt::CheckBox.new
|
|
513
|
-
form.addRow(
|
|
530
|
+
form.addRow("&Pause on error:", pause_on_error)
|
|
514
531
|
monitor = Qt::CheckBox.new
|
|
515
|
-
form.addRow(
|
|
532
|
+
form.addRow("&Monitor limits:", monitor)
|
|
516
533
|
if ScriptRunnerFrame.pause_on_error
|
|
517
534
|
pause_on_error.setCheckState(Qt::Checked)
|
|
518
535
|
else
|
|
519
536
|
pause_on_error.setCheckState(Qt::Unchecked)
|
|
520
537
|
end
|
|
521
538
|
pause_on_red = Qt::CheckBox.new
|
|
522
|
-
form.addRow(
|
|
539
|
+
form.addRow("Pause on &red limit:", pause_on_red)
|
|
523
540
|
if ScriptRunnerFrame.monitor_limits
|
|
524
541
|
monitor.setCheckState(Qt::Checked)
|
|
525
542
|
pause_on_red.setCheckState(Qt::Checked) if ScriptRunnerFrame.pause_on_red
|
|
@@ -787,23 +804,23 @@ module Cosmos
|
|
|
787
804
|
|
|
788
805
|
menu = Qt::Menu.new()
|
|
789
806
|
|
|
790
|
-
new_action = Qt::Action.new(
|
|
791
|
-
new_action.statusTip =
|
|
807
|
+
new_action = Qt::Action.new("&New", self)
|
|
808
|
+
new_action.statusTip = "Create a new script"
|
|
792
809
|
new_action.connect(SIGNAL('triggered()')) { file_new() }
|
|
793
810
|
menu.addAction(new_action)
|
|
794
811
|
|
|
795
|
-
close_action = Qt::Action.new(
|
|
796
|
-
close_action.statusTip =
|
|
812
|
+
close_action = Qt::Action.new("&Close", self)
|
|
813
|
+
close_action.statusTip = "Close the script"
|
|
797
814
|
close_action.connect(SIGNAL('triggered()')) { file_close() }
|
|
798
815
|
menu.addAction(close_action)
|
|
799
816
|
|
|
800
|
-
save_action = Qt::Action.new(
|
|
801
|
-
save_action.statusTip =
|
|
817
|
+
save_action = Qt::Action.new("&Save", self)
|
|
818
|
+
save_action.statusTip = "Save the script"
|
|
802
819
|
save_action.connect(SIGNAL('triggered()')) { file_save(false) }
|
|
803
820
|
menu.addAction(save_action)
|
|
804
821
|
|
|
805
|
-
save_action = Qt::Action.new(
|
|
806
|
-
save_action.statusTip =
|
|
822
|
+
save_action = Qt::Action.new("Save &As", self)
|
|
823
|
+
save_action.statusTip = "Save the script as"
|
|
807
824
|
save_action.connect(SIGNAL('triggered()')) { file_save(true) }
|
|
808
825
|
menu.addAction(save_action)
|
|
809
826
|
|
|
@@ -99,8 +99,8 @@ module Cosmos
|
|
|
99
99
|
attr_accessor :continue_after_error
|
|
100
100
|
attr_accessor :exceptions
|
|
101
101
|
attr_accessor :script_binding
|
|
102
|
-
attr_accessor :inline_return
|
|
103
|
-
attr_accessor :inline_return_params
|
|
102
|
+
attr_accessor :inline_return # Deprecated and unused - Here to prevent cache errors for old scripts
|
|
103
|
+
attr_accessor :inline_return_params # Deprecated and unused - Here to prevent cache errors for old scripts
|
|
104
104
|
attr_reader :message_log
|
|
105
105
|
attr_reader :script_class
|
|
106
106
|
attr_reader :top_level_instrumented_cache
|
|
@@ -126,6 +126,7 @@ module Cosmos
|
|
|
126
126
|
@@cancel_output = false
|
|
127
127
|
@@cancel_limits = false
|
|
128
128
|
@@file_number = 1
|
|
129
|
+
@@default_font = Cosmos.get_default_font
|
|
129
130
|
|
|
130
131
|
def initialize(parent, default_tab_text = 'Untitled')
|
|
131
132
|
super(parent)
|
|
@@ -252,7 +253,7 @@ module Cosmos
|
|
|
252
253
|
|
|
253
254
|
def create_ruby_editor
|
|
254
255
|
# Add Initial Text Window
|
|
255
|
-
script = RubyEditor.new(self)
|
|
256
|
+
script = RubyEditor.new(self, @@default_font)
|
|
256
257
|
script.enable_breakpoints = true if @debug_frame
|
|
257
258
|
connect(script,
|
|
258
259
|
SIGNAL('breakpoint_set(int)'),
|
|
@@ -266,6 +267,10 @@ module Cosmos
|
|
|
266
267
|
SIGNAL('breakpoints_cleared()'),
|
|
267
268
|
self,
|
|
268
269
|
SLOT('breakpoints_cleared()'))
|
|
270
|
+
script.connect(SIGNAL('font_changed(QFont)')) do |font|
|
|
271
|
+
# Remember changed fonts for future tabs
|
|
272
|
+
@@default_font = font
|
|
273
|
+
end
|
|
269
274
|
|
|
270
275
|
# Add right click menu
|
|
271
276
|
script.setContextMenuPolicy(Qt::CustomContextMenu)
|
|
@@ -315,6 +320,10 @@ module Cosmos
|
|
|
315
320
|
@script.setFocus
|
|
316
321
|
end
|
|
317
322
|
|
|
323
|
+
def active_script_highlight(color)
|
|
324
|
+
Qt.execute_in_main_thread { @active_script.highlight_line(color) }
|
|
325
|
+
end
|
|
326
|
+
|
|
318
327
|
def allow_start=(value)
|
|
319
328
|
@allow_start = value
|
|
320
329
|
if @allow_start
|
|
@@ -564,6 +573,10 @@ module Cosmos
|
|
|
564
573
|
# originally had comments but they were stripped in
|
|
565
574
|
# ruby_lex_utils.remove_comments
|
|
566
575
|
next if segment.strip.empty?
|
|
576
|
+
|
|
577
|
+
# Create a variable to hold the segment's return value
|
|
578
|
+
instrumented_line << "__return_val = nil; "
|
|
579
|
+
|
|
567
580
|
# If not inside a begin block then create one to catch exceptions
|
|
568
581
|
unless inside_begin
|
|
569
582
|
instrumented_line << 'begin; '
|
|
@@ -571,24 +584,23 @@ module Cosmos
|
|
|
571
584
|
|
|
572
585
|
# Add preline instrumentation
|
|
573
586
|
instrumented_line << "ScriptRunnerFrame.instance.script_binding = binding(); "\
|
|
574
|
-
"if ScriptRunnerFrame.instance.inline_return then ScriptRunnerFrame.instance.inline_return = nil; "\
|
|
575
|
-
"return ScriptRunnerFrame.instance.inline_return_params; end; "\
|
|
576
587
|
"ScriptRunnerFrame.instance.pre_line_instrumentation('#{filename}', #{line_no}); "
|
|
577
588
|
|
|
578
589
|
# Add the actual line
|
|
590
|
+
instrumented_line << "__return_val = "
|
|
579
591
|
instrumented_line << segment
|
|
580
592
|
instrumented_line.chomp!
|
|
581
593
|
|
|
582
594
|
# Add postline instrumentation
|
|
583
|
-
instrumented_line << "; ScriptRunnerFrame.instance.post_line_instrumentation('#{filename}', #{line_no})"
|
|
595
|
+
instrumented_line << "; ScriptRunnerFrame.instance.post_line_instrumentation('#{filename}', #{line_no}); "
|
|
584
596
|
|
|
585
597
|
# Complete begin block to catch exceptions
|
|
586
598
|
unless inside_begin
|
|
587
|
-
instrumented_line << "
|
|
588
|
-
"retry if ScriptRunnerFrame.instance.exception_instrumentation(eval_error, '#{filename}', #{line_no}); end"
|
|
599
|
+
instrumented_line << "rescue Exception => eval_error; "\
|
|
600
|
+
"retry if ScriptRunnerFrame.instance.exception_instrumentation(eval_error, '#{filename}', #{line_no}); end; "
|
|
589
601
|
end
|
|
590
602
|
|
|
591
|
-
instrumented_line << "\n"
|
|
603
|
+
instrumented_line << " __return_val\n"
|
|
592
604
|
else
|
|
593
605
|
unless segment =~ /^\s*end\s*$/ or segment =~ /^\s*when .*$/
|
|
594
606
|
num_left_brackets = segment.count('{')
|
|
@@ -752,6 +764,21 @@ module Cosmos
|
|
|
752
764
|
@script.comment_or_uncomment_lines unless running?()
|
|
753
765
|
end
|
|
754
766
|
|
|
767
|
+
def zoom_in
|
|
768
|
+
# @active_script since this can be used while running
|
|
769
|
+
@active_script.zoom_in
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
def zoom_out
|
|
773
|
+
# @active_script since this can be used while running
|
|
774
|
+
@active_script.zoom_out
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
def zoom_default
|
|
778
|
+
# @active_script since this can be used while running
|
|
779
|
+
@active_script.zoom_default
|
|
780
|
+
end
|
|
781
|
+
|
|
755
782
|
##################################################################################
|
|
756
783
|
# Implement Script functionality in the frame (run selection, run from cursor, etc
|
|
757
784
|
##################################################################################
|
|
@@ -975,15 +1002,6 @@ module Cosmos
|
|
|
975
1002
|
|
|
976
1003
|
@debug_frame.addWidget(@debug_text)
|
|
977
1004
|
|
|
978
|
-
@return_button = Qt::PushButton.new('Insert Return')
|
|
979
|
-
@debug_frame.addWidget(@return_button)
|
|
980
|
-
@return_button.connect(SIGNAL('clicked(bool)')) do
|
|
981
|
-
scriptrunner_puts "Debug: insert_return(); ScriptRunnerFrame.instance.go()"
|
|
982
|
-
handle_output_io()
|
|
983
|
-
insert_return()
|
|
984
|
-
go()
|
|
985
|
-
end
|
|
986
|
-
|
|
987
1005
|
@bottom_frame.layout.addLayout(@debug_frame)
|
|
988
1006
|
end
|
|
989
1007
|
end
|
|
@@ -1060,7 +1078,7 @@ module Cosmos
|
|
|
1060
1078
|
|
|
1061
1079
|
def toggle_disconnect(config_file, ask_for_config_file = true)
|
|
1062
1080
|
dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
|
|
1063
|
-
dialog.setWindowTitle(
|
|
1081
|
+
dialog.setWindowTitle("Disconnect Settings")
|
|
1064
1082
|
dialog_layout = Qt::VBoxLayout.new
|
|
1065
1083
|
dialog_layout.addWidget(Qt::Label.new("Targets checked will be disconnected."))
|
|
1066
1084
|
|
|
@@ -1156,7 +1174,7 @@ module Cosmos
|
|
|
1156
1174
|
Splash.execute(self) do |splash|
|
|
1157
1175
|
ConfigParser.splash = splash
|
|
1158
1176
|
splash.message = "Initializing Command and Telemetry Server"
|
|
1159
|
-
set_disconnected_targets(targets, config_file)
|
|
1177
|
+
set_disconnected_targets(targets, targets.length == all_targets.length, config_file)
|
|
1160
1178
|
ConfigParser.splash = nil
|
|
1161
1179
|
end
|
|
1162
1180
|
end
|
|
@@ -1627,33 +1645,33 @@ module Cosmos
|
|
|
1627
1645
|
menu = current_script.context_menu(point)
|
|
1628
1646
|
menu.addSeparator()
|
|
1629
1647
|
if not self.class.running?
|
|
1630
|
-
exec_selected_action = Qt::Action.new(
|
|
1631
|
-
exec_selected_action.statusTip =
|
|
1648
|
+
exec_selected_action = Qt::Action.new("Execute Selected Lines", self)
|
|
1649
|
+
exec_selected_action.statusTip = "Execute the selected lines as a standalone script"
|
|
1632
1650
|
exec_selected_action.connect(SIGNAL('triggered()')) { run_selection() }
|
|
1633
1651
|
menu.addAction(exec_selected_action)
|
|
1634
1652
|
|
|
1635
|
-
exec_cursor_action = Qt::Action.new(
|
|
1636
|
-
exec_cursor_action.statusTip =
|
|
1653
|
+
exec_cursor_action = Qt::Action.new("Execute From Cursor", self)
|
|
1654
|
+
exec_cursor_action.statusTip = "Execute the script starting at the line containing the cursor"
|
|
1637
1655
|
exec_cursor_action.connect(SIGNAL('triggered()')) { run_from_cursor() }
|
|
1638
1656
|
menu.addAction(exec_cursor_action)
|
|
1639
1657
|
|
|
1640
1658
|
menu.addSeparator()
|
|
1641
1659
|
|
|
1642
1660
|
if RUBY_VERSION.split('.')[0].to_i > 1
|
|
1643
|
-
syntax_action = Qt::Action.new(
|
|
1644
|
-
syntax_action.statusTip =
|
|
1661
|
+
syntax_action = Qt::Action.new("Ruby Syntax Check Selected Lines", self)
|
|
1662
|
+
syntax_action.statusTip = "Check the selected lines for valid Ruby syntax"
|
|
1645
1663
|
syntax_action.connect(SIGNAL('triggered()')) { ruby_syntax_check_selection() }
|
|
1646
1664
|
menu.addAction(syntax_action)
|
|
1647
1665
|
end
|
|
1648
1666
|
|
|
1649
|
-
mnemonic_action = Qt::Action.new(
|
|
1650
|
-
mnemonic_action.statusTip =
|
|
1667
|
+
mnemonic_action = Qt::Action.new("Mnemonic Check Selected Lines", self)
|
|
1668
|
+
mnemonic_action.statusTip = "Check the selected lines for valid targets, packets, mnemonics and parameters"
|
|
1651
1669
|
mnemonic_action.connect(SIGNAL('triggered()')) { mnemonic_check_selection() }
|
|
1652
1670
|
menu.addAction(mnemonic_action)
|
|
1653
1671
|
|
|
1654
1672
|
elsif running?() and @realtime_button_bar.state != 'Running'
|
|
1655
|
-
exec_selected_action = Qt::Action.new(
|
|
1656
|
-
exec_selected_action.statusTip =
|
|
1673
|
+
exec_selected_action = Qt::Action.new("Execute Selected Lines While Paused", self)
|
|
1674
|
+
exec_selected_action.statusTip = "Execute the selected lines as a standalone script"
|
|
1657
1675
|
exec_selected_action.connect(SIGNAL('triggered()')) { run_selection_while_paused() }
|
|
1658
1676
|
menu.addAction(exec_selected_action)
|
|
1659
1677
|
end
|