cosmos 4.0.3-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.
Files changed (1491) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitattributes +3 -0
  4. data/.gitignore +48 -0
  5. data/.rubocop.yml +23 -0
  6. data/.travis.yml +10 -0
  7. data/.yardopts +3 -0
  8. data/CONTRIBUTING.txt +50 -0
  9. data/Gemfile +10 -0
  10. data/Guardfile +27 -0
  11. data/LICENSE.txt +879 -0
  12. data/Manifest.txt +1549 -0
  13. data/README.md +111 -0
  14. data/Rakefile +264 -0
  15. data/autohotkey/config/data/attitude.bin +0 -0
  16. data/autohotkey/config/data/diamond.STL +58 -0
  17. data/autohotkey/config/data/groundoff.gif +0 -0
  18. data/autohotkey/config/data/groundon.gif +0 -0
  19. data/autohotkey/config/data/position.bin +0 -0
  20. data/autohotkey/config/data/satellite.gif +0 -0
  21. data/autohotkey/config/data/tada.wav +0 -0
  22. data/autohotkey/config/system/system.txt +29 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +126 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -0
  25. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  26. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  27. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  28. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -0
  29. data/autohotkey/config/targets/INST/screens/_footer.txt +4 -0
  30. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  31. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  32. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  33. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  34. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  35. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  36. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  37. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  38. data/autohotkey/config/targets/INST/screens/hs.txt +46 -0
  39. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  40. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  41. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  42. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  43. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  44. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  45. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  46. data/autohotkey/config/targets/INST/target.txt +27 -0
  47. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  48. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  49. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  50. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  51. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  52. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  53. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  54. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  55. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  56. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  57. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  58. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  59. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  60. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  61. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  62. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  65. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  66. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  67. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  68. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  69. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  70. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  71. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  72. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  73. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  74. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  75. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  76. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  77. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  78. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  79. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  80. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  81. data/autohotkey/config/tools/table_manager/OldOneDimensionalTable_def.txt +19 -0
  82. data/autohotkey/config/tools/table_manager/OldTwoDimensionalTable_def.txt +248 -0
  83. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +31 -0
  84. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +28 -0
  85. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  86. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  87. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  88. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  89. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  90. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  91. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  92. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  93. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  94. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  95. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  96. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  97. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  98. data/autohotkey/lib/example_background_task.rb +42 -0
  99. data/autohotkey/lib/user_version.rb +3 -0
  100. data/autohotkey/procedures/clear_util.rb +7 -0
  101. data/autohotkey/procedures/collect.rb +18 -0
  102. data/autohotkey/procedures/collect_util.rb +14 -0
  103. data/autohotkey/procedures/example_test.rb +71 -0
  104. data/autohotkey/procedures/example_test2.rb +74 -0
  105. data/autohotkey/procedures/script_test.rb +21 -0
  106. data/autohotkey/procedures/syntax_error.rb +18 -0
  107. data/autohotkey/tools/CmdExtractorAHK +16 -0
  108. data/autohotkey/tools/CmdSender +14 -0
  109. data/autohotkey/tools/CmdSenderAHK +18 -0
  110. data/autohotkey/tools/CmdSequence +14 -0
  111. data/autohotkey/tools/CmdSequenceAHK +23 -0
  112. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  113. data/autohotkey/tools/CmdTlmServer +14 -0
  114. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  115. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  116. data/autohotkey/tools/ConfigEditor +16 -0
  117. data/autohotkey/tools/DataViewer +14 -0
  118. data/autohotkey/tools/DataViewerAHK +17 -0
  119. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  120. data/autohotkey/tools/LauncherAHK +17 -0
  121. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  122. data/autohotkey/tools/OpenGLBuilderAHK +24 -0
  123. data/autohotkey/tools/PacketViewer +14 -0
  124. data/autohotkey/tools/PacketViewerAHK +18 -0
  125. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  126. data/autohotkey/tools/Replay +14 -0
  127. data/autohotkey/tools/ReplayAHK +17 -0
  128. data/autohotkey/tools/ScriptRunner +14 -0
  129. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  130. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  131. data/autohotkey/tools/TableManager +14 -0
  132. data/autohotkey/tools/TableManagerAHK +25 -0
  133. data/autohotkey/tools/TableManagerAHK2 +18 -0
  134. data/autohotkey/tools/TableManagerAHK3 +18 -0
  135. data/autohotkey/tools/TableManagerAHK4 +24 -0
  136. data/autohotkey/tools/TestRunner +15 -0
  137. data/autohotkey/tools/TestRunnerAHK +17 -0
  138. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  139. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  140. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  141. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  142. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  143. data/autohotkey/tools/TlmExtractor +15 -0
  144. data/autohotkey/tools/TlmExtractorAHK +19 -0
  145. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  146. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  147. data/autohotkey/tools/TlmGrapher +14 -0
  148. data/autohotkey/tools/TlmGrapherAHK +19 -0
  149. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  150. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  151. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  152. data/autohotkey/tools/TlmViewer +14 -0
  153. data/autohotkey/tools/TlmViewerAHK +28 -0
  154. data/autohotkey/tools/TlmViewerAHK2 +22 -0
  155. data/autohotkey/tools/TlmViewerAHK3 +23 -0
  156. data/autohotkey/tools/TlmViewerAHK4 +22 -0
  157. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  158. data/autohotkey/tools/autohotkey.rb +38 -0
  159. data/autohotkey/tools/cmd_extractor.ahk +50 -0
  160. data/autohotkey/tools/cmd_sender.ahk +180 -0
  161. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  162. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  163. data/autohotkey/tools/cmd_tlm_server.ahk +90 -0
  164. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  165. data/autohotkey/tools/data_viewer.ahk +140 -0
  166. data/autohotkey/tools/handbook_creator.ahk +32 -0
  167. data/autohotkey/tools/launcher.ahk +41 -0
  168. data/autohotkey/tools/limits_monitor.ahk +121 -0
  169. data/autohotkey/tools/open_gl_builder.ahk +133 -0
  170. data/autohotkey/tools/packet_viewer.ahk +217 -0
  171. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  172. data/autohotkey/tools/replay.ahk +103 -0
  173. data/autohotkey/tools/script_runner.ahk +588 -0
  174. data/autohotkey/tools/script_runner2.ahk +50 -0
  175. data/autohotkey/tools/table_manager.ahk +291 -0
  176. data/autohotkey/tools/test_runner.ahk +262 -0
  177. data/autohotkey/tools/test_runner2.ahk +49 -0
  178. data/autohotkey/tools/test_runner3.ahk +11 -0
  179. data/autohotkey/tools/test_runner5.ahk +8 -0
  180. data/autohotkey/tools/test_runner6.ahk +5 -0
  181. data/autohotkey/tools/tlm_extractor.ahk +357 -0
  182. data/autohotkey/tools/tlm_grapher.ahk +658 -0
  183. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  184. data/autohotkey/tools/tlm_grapher3.ahk +23 -0
  185. data/autohotkey/tools/tlm_viewer.ahk +140 -0
  186. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  187. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  188. data/autohotkey/tools/tlm_viewer5.ahk +19 -0
  189. data/autohotkey/tools/tool_launch.rb +38 -0
  190. data/bin/cosmos +266 -0
  191. data/bin/cstol_converter +1166 -0
  192. data/bin/exchndl20-x64.dll +0 -0
  193. data/bin/exchndl20.dll +0 -0
  194. data/bin/exchndl21-x64.dll +0 -0
  195. data/bin/exchndl21.dll +0 -0
  196. data/bin/exchndl22-x64.dll +0 -0
  197. data/bin/exchndl22.dll +0 -0
  198. data/bin/mgwhelp-x64.dll +0 -0
  199. data/bin/mgwhelp.dll +0 -0
  200. data/bin/rubysloc +85 -0
  201. data/bin/xtce_converter +83 -0
  202. data/cosmos.gemspec +109 -0
  203. data/data/COSMOS_64x64.bmp +0 -0
  204. data/data/COSMOS_64x64.ico +0 -0
  205. data/data/COSMOS_64x64.png +0 -0
  206. data/data/COSMOS_Architecture.png +0 -0
  207. data/data/CheckBoxCheck.gif +0 -0
  208. data/data/CheckBoxEmpty.gif +0 -0
  209. data/data/Earthmap1024x512.gif +0 -0
  210. data/data/about.txt +4 -0
  211. data/data/add_database.png +0 -0
  212. data/data/add_plot.png +0 -0
  213. data/data/add_tab.png +0 -0
  214. data/data/blank.png +0 -0
  215. data/data/bug.png +0 -0
  216. data/data/checkmark.png +0 -0
  217. data/data/close.png +0 -0
  218. data/data/cmd_extractor.png +0 -0
  219. data/data/cmd_sender.png +0 -0
  220. data/data/cmd_sequence.png +0 -0
  221. data/data/config/_array_params.yaml +23 -0
  222. data/data/config/_id_items.yaml +24 -0
  223. data/data/config/_id_params.yaml +58 -0
  224. data/data/config/_interfaces.yaml +206 -0
  225. data/data/config/_items.yaml +20 -0
  226. data/data/config/_params.yaml +58 -0
  227. data/data/config/cmd_tlm_server.yaml +124 -0
  228. data/data/config/command.yaml +40 -0
  229. data/data/config/command_modifiers.yaml +145 -0
  230. data/data/config/command_telemetry.yaml +3 -0
  231. data/data/config/data_viewer.yaml +43 -0
  232. data/data/config/handbook_creator.yaml +23 -0
  233. data/data/config/housekeeping_params.yaml +71 -0
  234. data/data/config/interface_modifiers.yaml +44 -0
  235. data/data/config/item_modifiers.yaml +211 -0
  236. data/data/config/launcher.yaml +117 -0
  237. data/data/config/limits_monitor.yaml +53 -0
  238. data/data/config/linegraph_params.yaml +30 -0
  239. data/data/config/linegraph_plot.yaml +106 -0
  240. data/data/config/page_modifiers.yaml +128 -0
  241. data/data/config/param_item_modifiers.yaml +46 -0
  242. data/data/config/parameter_modifiers.yaml +180 -0
  243. data/data/config/protocols.yaml +273 -0
  244. data/data/config/screen.yaml +151 -0
  245. data/data/config/script_runner.yaml +15 -0
  246. data/data/config/system.yaml +247 -0
  247. data/data/config/table_manager.yaml +76 -0
  248. data/data/config/table_parameter_modifiers.yaml +9 -0
  249. data/data/config/target.yaml +80 -0
  250. data/data/config/telemetry.yaml +80 -0
  251. data/data/config/telemetry_modifiers.yaml +142 -0
  252. data/data/config/test_runner.yaml +118 -0
  253. data/data/config/tlm_extractor.yaml +109 -0
  254. data/data/config/tlm_grapher.yaml +78 -0
  255. data/data/config/tlm_viewer.yaml +112 -0
  256. data/data/config/unknown.yaml +3 -0
  257. data/data/config/widgets.yaml +1339 -0
  258. data/data/config/xy_params.yaml +50 -0
  259. data/data/config/xy_plot.yaml +12 -0
  260. data/data/config_editor.png +0 -0
  261. data/data/copy.png +0 -0
  262. data/data/cosmos.xcf +0 -0
  263. data/data/cosmos_word.gif +0 -0
  264. data/data/crc.txt +351 -0
  265. data/data/critical.wav +0 -0
  266. data/data/cts.png +0 -0
  267. data/data/cut.png +0 -0
  268. data/data/data_viewer.png +0 -0
  269. data/data/delete.png +0 -0
  270. data/data/delete_database.png +0 -0
  271. data/data/delete_plot.png +0 -0
  272. data/data/delete_tab.png +0 -0
  273. data/data/diamond.STL +58 -0
  274. data/data/disconnected.png +0 -0
  275. data/data/edit.png +0 -0
  276. data/data/edit_database.png +0 -0
  277. data/data/edit_plot.png +0 -0
  278. data/data/edit_tab.png +0 -0
  279. data/data/end-26.png +0 -0
  280. data/data/fast_forward-26.png +0 -0
  281. data/data/file.png +0 -0
  282. data/data/handbook_creator.png +0 -0
  283. data/data/help.png +0 -0
  284. data/data/html-32.png +0 -0
  285. data/data/information.wav +0 -0
  286. data/data/input.wav +0 -0
  287. data/data/launcher.png +0 -0
  288. data/data/legal.gif +0 -0
  289. data/data/legal.txt +8 -0
  290. data/data/limits_monitor.png +0 -0
  291. data/data/message.wav +0 -0
  292. data/data/moonmap1k.gif +0 -0
  293. data/data/multi.png +0 -0
  294. data/data/open.png +0 -0
  295. data/data/open_in_browser-32.png +0 -0
  296. data/data/opengl_builder.png +0 -0
  297. data/data/packet_viewer.png +0 -0
  298. data/data/pdf-32.png +0 -0
  299. data/data/play-26.png +0 -0
  300. data/data/question.wav +0 -0
  301. data/data/redo.png +0 -0
  302. data/data/replay.png +0 -0
  303. data/data/reverse-play-26.png +0 -0
  304. data/data/rewind-26.png +0 -0
  305. data/data/running.png +0 -0
  306. data/data/save.png +0 -0
  307. data/data/save_as.png +0 -0
  308. data/data/screenshot.png +0 -0
  309. data/data/script_runner.png +0 -0
  310. data/data/search-14.png +0 -0
  311. data/data/search.png +0 -0
  312. data/data/send_file.png +0 -0
  313. data/data/skip_to_start-26.png +0 -0
  314. data/data/spinner.gif +0 -0
  315. data/data/splash.gif +0 -0
  316. data/data/stop-26.png +0 -0
  317. data/data/table_manager.png +0 -0
  318. data/data/test_runner.png +0 -0
  319. data/data/tlm_extractor.png +0 -0
  320. data/data/tlm_grapher.png +0 -0
  321. data/data/tlm_viewer.png +0 -0
  322. data/data/undo.png +0 -0
  323. data/data/warning.wav +0 -0
  324. data/demo/Gemfile +10 -0
  325. data/demo/Launcher +16 -0
  326. data/demo/Launcher.bat +9 -0
  327. data/demo/Rakefile +77 -0
  328. data/demo/config/data/attitude.bin +0 -0
  329. data/demo/config/data/crc.txt +258 -0
  330. data/demo/config/data/diamond.STL +58 -0
  331. data/demo/config/data/groundoff.gif +0 -0
  332. data/demo/config/data/groundon.gif +0 -0
  333. data/demo/config/data/hselectoff.gif +0 -0
  334. data/demo/config/data/hselecton.gif +0 -0
  335. data/demo/config/data/hswitchoff.gif +0 -0
  336. data/demo/config/data/hswitchon.gif +0 -0
  337. data/demo/config/data/meta_init.txt +1 -0
  338. data/demo/config/data/position.bin +0 -0
  339. data/demo/config/data/poweroff.gif +0 -0
  340. data/demo/config/data/poweron.gif +0 -0
  341. data/demo/config/data/satellite.gif +0 -0
  342. data/demo/config/data/tada.wav +0 -0
  343. data/demo/config/data/vswitchoff.gif +0 -0
  344. data/demo/config/data/vswitchon.gif +0 -0
  345. data/demo/config/system/system.txt +47 -0
  346. data/demo/config/system/system2.txt +43 -0
  347. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  348. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  349. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  350. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +18 -0
  351. data/demo/config/targets/EXAMPLE/target.txt +9 -0
  352. data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  353. data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  354. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +57 -0
  355. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +164 -0
  356. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  357. data/demo/config/targets/INST/doc/README.txt +1 -0
  358. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  359. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  360. data/demo/config/targets/INST/lib/sim_inst.rb +321 -0
  361. data/demo/config/targets/INST/procedures/checks.rb +11 -0
  362. data/demo/config/targets/INST/procedures/collect.rb +18 -0
  363. data/demo/config/targets/INST/procedures/disconnect.rb +29 -0
  364. data/demo/config/targets/INST/procedures/utilities/clear.rb +7 -0
  365. data/demo/config/targets/INST/procedures/utilities/collect.rb +14 -0
  366. data/demo/config/targets/INST/screens/_footer.txt +4 -0
  367. data/demo/config/targets/INST/screens/adcs.txt +70 -0
  368. data/demo/config/targets/INST/screens/array.txt +15 -0
  369. data/demo/config/targets/INST/screens/block.txt +8 -0
  370. data/demo/config/targets/INST/screens/commanding.txt +37 -0
  371. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  372. data/demo/config/targets/INST/screens/ground.txt +25 -0
  373. data/demo/config/targets/INST/screens/hs.txt +42 -0
  374. data/demo/config/targets/INST/screens/latest.txt +23 -0
  375. data/demo/config/targets/INST/screens/limits.txt +43 -0
  376. data/demo/config/targets/INST/screens/other.txt +24 -0
  377. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  378. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  379. data/demo/config/targets/INST/screens/tabs.txt +68 -0
  380. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  381. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  382. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  383. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  384. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  385. data/demo/config/targets/INST/target.txt +37 -0
  386. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  387. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  388. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  389. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  390. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +6 -0
  391. data/demo/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  392. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  393. data/demo/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  394. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  395. data/demo/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  396. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +55 -0
  397. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  398. data/demo/config/targets/SYSTEM/target.txt +12 -0
  399. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  400. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  401. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  402. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +59 -0
  403. data/demo/config/targets/TEMPLATED/target.txt +8 -0
  404. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +49 -0
  405. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +42 -0
  406. data/demo/config/tools/data_viewer/data_viewer.txt +20 -0
  407. data/demo/config/tools/example_application.css +58 -0
  408. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  409. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  410. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -0
  411. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  412. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  413. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  414. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  415. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  416. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  417. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  418. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  419. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  420. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -0
  421. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  422. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  423. data/demo/config/tools/launcher/launcher.css +7 -0
  424. data/demo/config/tools/launcher/launcher.txt +48 -0
  425. data/demo/config/tools/launcher/launcher2.css +10 -0
  426. data/demo/config/tools/launcher/launcher2.txt +48 -0
  427. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  428. data/demo/config/tools/limits_monitor/README.txt +1 -0
  429. data/demo/config/tools/opengl_builder/README.txt +1 -0
  430. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  431. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  432. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  433. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +37 -0
  434. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +34 -0
  435. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +9 -0
  436. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +31 -0
  437. data/demo/config/tools/test_runner/test_runner.css +45 -0
  438. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  439. data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
  440. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  441. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  442. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  443. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  444. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  445. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  446. data/demo/lib/example_background_task.rb +55 -0
  447. data/demo/lib/example_target.rb +103 -0
  448. data/demo/lib/scpi_target.rb +68 -0
  449. data/demo/lib/user_version.rb +3 -0
  450. data/demo/procedures/cosmos_api_test.rb +310 -0
  451. data/demo/procedures/example_test.rb +192 -0
  452. data/demo/procedures/plot_test.rb +8 -0
  453. data/demo/procedures/run_example_test.rb +3 -0
  454. data/demo/procedures/test.rb +51 -0
  455. data/demo/tools/CmdExtractor +16 -0
  456. data/demo/tools/CmdExtractor.bat +9 -0
  457. data/demo/tools/CmdSender +16 -0
  458. data/demo/tools/CmdSender.bat +9 -0
  459. data/demo/tools/CmdSequence +16 -0
  460. data/demo/tools/CmdSequence.bat +9 -0
  461. data/demo/tools/CmdTlmServer +16 -0
  462. data/demo/tools/CmdTlmServer.bat +9 -0
  463. data/demo/tools/ConfigEditor +16 -0
  464. data/demo/tools/ConfigEditor.bat +9 -0
  465. data/demo/tools/DataViewer +16 -0
  466. data/demo/tools/DataViewer.bat +9 -0
  467. data/demo/tools/ExampleTarget +16 -0
  468. data/demo/tools/ExampleTarget.bat +9 -0
  469. data/demo/tools/HandbookCreator +16 -0
  470. data/demo/tools/HandbookCreator.bat +9 -0
  471. data/demo/tools/Launcher +16 -0
  472. data/demo/tools/Launcher.bat +9 -0
  473. data/demo/tools/LimitsMonitor +16 -0
  474. data/demo/tools/LimitsMonitor.bat +9 -0
  475. data/demo/tools/OpenGLBuilder +16 -0
  476. data/demo/tools/OpenGLBuilder.bat +9 -0
  477. data/demo/tools/PacketViewer +16 -0
  478. data/demo/tools/PacketViewer.bat +9 -0
  479. data/demo/tools/Replay +16 -0
  480. data/demo/tools/Replay.bat +9 -0
  481. data/demo/tools/ScpiTarget +16 -0
  482. data/demo/tools/ScpiTarget.bat +9 -0
  483. data/demo/tools/ScriptRunner +16 -0
  484. data/demo/tools/ScriptRunner.bat +9 -0
  485. data/demo/tools/TableManager +16 -0
  486. data/demo/tools/TableManager.bat +9 -0
  487. data/demo/tools/TestRunner +16 -0
  488. data/demo/tools/TestRunner.bat +9 -0
  489. data/demo/tools/TlmExtractor +16 -0
  490. data/demo/tools/TlmExtractor.bat +9 -0
  491. data/demo/tools/TlmGrapher +16 -0
  492. data/demo/tools/TlmGrapher.bat +9 -0
  493. data/demo/tools/TlmViewer +16 -0
  494. data/demo/tools/TlmViewer.bat +9 -0
  495. data/demo/tools/ToolLaunch.bat +72 -0
  496. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  497. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  498. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  499. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  500. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  501. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  502. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  503. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  504. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  505. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  506. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  507. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  508. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  509. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  510. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  511. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  512. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  513. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  514. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  515. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  516. data/demo/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  517. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  518. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  519. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  520. data/demo/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  521. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  522. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  523. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  524. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  525. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  526. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  527. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  528. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  529. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  530. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  531. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  532. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  533. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  534. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  535. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  536. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  537. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  538. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  539. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  540. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  541. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  542. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  543. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  544. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  545. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  546. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  547. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  548. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  549. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  550. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  551. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  552. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  553. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  554. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  555. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  556. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  557. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  558. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  559. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  560. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  561. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  562. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  563. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  564. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  565. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  566. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  567. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  568. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  569. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  570. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  571. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  572. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  573. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  574. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  575. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  576. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  577. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  578. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  579. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  580. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  581. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  582. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  583. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  584. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  585. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  586. data/demo/tools/tool_launch.rb +38 -0
  587. data/ext/cosmos/ext/array/array.c +111 -0
  588. data/ext/cosmos/ext/array/extconf.rb +13 -0
  589. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  590. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  591. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  592. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  593. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  594. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  595. data/ext/cosmos/ext/crc/crc.c +341 -0
  596. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  597. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  598. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  599. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  600. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -0
  601. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  602. data/ext/cosmos/ext/packet/packet.c +350 -0
  603. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  604. data/ext/cosmos/ext/platform/platform.c +101 -0
  605. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  606. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  607. data/ext/cosmos/ext/string/extconf.rb +13 -0
  608. data/ext/cosmos/ext/string/string.c +49 -0
  609. data/ext/cosmos/ext/structure/structure.c +1433 -0
  610. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  611. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  612. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  613. data/ext/cosmos/ext/telemetry/telemetry.c +307 -0
  614. data/ext/mkrf_conf.rb +40 -0
  615. data/install/Gemfile +10 -0
  616. data/install/Launcher +16 -0
  617. data/install/Launcher.bat +9 -0
  618. data/install/Rakefile +77 -0
  619. data/install/config/data/README.txt +1 -0
  620. data/install/config/data/crc.txt +160 -0
  621. data/install/config/system/system.txt +39 -0
  622. data/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +9 -0
  623. data/install/config/targets/SYSTEM/target.txt +12 -0
  624. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  625. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  626. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  627. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  628. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  629. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  630. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  631. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  632. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  633. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  634. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  635. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  636. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  637. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  638. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  639. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  640. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  641. data/install/config/tools/launcher/launcher.txt +40 -0
  642. data/install/config/tools/limits_monitor/README.txt +1 -0
  643. data/install/config/tools/opengl_builder/README.txt +1 -0
  644. data/install/config/tools/script_runner/script_runner.txt +3 -0
  645. data/install/config/tools/table_manager/README.txt +1 -0
  646. data/install/config/tools/test_runner/test_runner.txt +8 -0
  647. data/install/config/tools/tlm_extractor/README.txt +1 -0
  648. data/install/config/tools/tlm_grapher/README.txt +1 -0
  649. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  650. data/install/lib/user_version.rb +3 -0
  651. data/install/procedures/README.txt +1 -0
  652. data/install/tools/CmdExtractor +16 -0
  653. data/install/tools/CmdExtractor.bat +9 -0
  654. data/install/tools/CmdSender +16 -0
  655. data/install/tools/CmdSender.bat +9 -0
  656. data/install/tools/CmdSequence +16 -0
  657. data/install/tools/CmdSequence.bat +9 -0
  658. data/install/tools/CmdTlmServer +16 -0
  659. data/install/tools/CmdTlmServer.bat +9 -0
  660. data/install/tools/ConfigEditor +16 -0
  661. data/install/tools/ConfigEditor.bat +9 -0
  662. data/install/tools/DataViewer +16 -0
  663. data/install/tools/DataViewer.bat +9 -0
  664. data/install/tools/HandbookCreator +16 -0
  665. data/install/tools/HandbookCreator.bat +9 -0
  666. data/install/tools/Launcher +16 -0
  667. data/install/tools/Launcher.bat +9 -0
  668. data/install/tools/LimitsMonitor +16 -0
  669. data/install/tools/LimitsMonitor.bat +9 -0
  670. data/install/tools/OpenGLBuilder +16 -0
  671. data/install/tools/OpenGLBuilder.bat +9 -0
  672. data/install/tools/PacketViewer +16 -0
  673. data/install/tools/PacketViewer.bat +9 -0
  674. data/install/tools/Replay +16 -0
  675. data/install/tools/Replay.bat +9 -0
  676. data/install/tools/ScriptRunner +16 -0
  677. data/install/tools/ScriptRunner.bat +9 -0
  678. data/install/tools/TableManager +16 -0
  679. data/install/tools/TableManager.bat +9 -0
  680. data/install/tools/TestRunner +16 -0
  681. data/install/tools/TestRunner.bat +9 -0
  682. data/install/tools/TlmExtractor +16 -0
  683. data/install/tools/TlmExtractor.bat +9 -0
  684. data/install/tools/TlmGrapher +16 -0
  685. data/install/tools/TlmGrapher.bat +9 -0
  686. data/install/tools/TlmViewer +16 -0
  687. data/install/tools/TlmViewer.bat +9 -0
  688. data/install/tools/ToolLaunch.bat +72 -0
  689. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  690. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  691. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  692. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  693. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  694. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  695. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  696. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  697. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  698. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  699. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  700. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  701. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  702. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  703. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  704. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  705. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  706. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  707. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  708. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  709. data/install/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  710. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  711. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  712. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  713. data/install/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  714. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  715. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  716. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  717. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  718. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  719. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  720. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  721. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  722. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  723. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  724. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  725. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  726. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  727. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  728. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  729. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  730. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  731. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  732. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  733. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  734. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  735. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  736. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  737. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  738. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  739. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  740. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  741. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  742. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  743. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  744. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  745. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  746. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  747. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  748. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  749. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  750. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  751. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  752. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  753. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  754. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  755. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  756. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  757. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  758. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  759. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  760. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  761. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  762. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  763. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  764. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  765. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  766. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  767. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  768. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  769. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  770. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  771. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  772. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  773. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  774. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  775. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  776. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  777. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  778. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  779. data/install/tools/tool_launch.rb +38 -0
  780. data/lib/cosmos.rb +63 -0
  781. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  782. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  783. data/lib/cosmos/config/config_parser.rb +508 -0
  784. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  785. data/lib/cosmos/conversions.rb +13 -0
  786. data/lib/cosmos/conversions/conversion.rb +52 -0
  787. data/lib/cosmos/conversions/generic_conversion.rb +67 -0
  788. data/lib/cosmos/conversions/new_packet_log_conversion.rb +52 -0
  789. data/lib/cosmos/conversions/polynomial_conversion.rb +79 -0
  790. data/lib/cosmos/conversions/processor_conversion.rb +56 -0
  791. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  792. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  793. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  794. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +139 -0
  795. data/lib/cosmos/conversions/unix_time_conversion.rb +57 -0
  796. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  797. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  798. data/lib/cosmos/core_ext.rb +18 -0
  799. data/lib/cosmos/core_ext/array.rb +397 -0
  800. data/lib/cosmos/core_ext/class.rb +53 -0
  801. data/lib/cosmos/core_ext/cosmos_io.rb +45 -0
  802. data/lib/cosmos/core_ext/exception.rb +52 -0
  803. data/lib/cosmos/core_ext/file.rb +76 -0
  804. data/lib/cosmos/core_ext/hash.rb +28 -0
  805. data/lib/cosmos/core_ext/io.rb +93 -0
  806. data/lib/cosmos/core_ext/kernel.rb +33 -0
  807. data/lib/cosmos/core_ext/math.rb +119 -0
  808. data/lib/cosmos/core_ext/matrix.rb +149 -0
  809. data/lib/cosmos/core_ext/objectspace.rb +27 -0
  810. data/lib/cosmos/core_ext/range.rb +18 -0
  811. data/lib/cosmos/core_ext/socket.rb +32 -0
  812. data/lib/cosmos/core_ext/string.rb +351 -0
  813. data/lib/cosmos/core_ext/stringio.rb +24 -0
  814. data/lib/cosmos/core_ext/time.rb +481 -0
  815. data/lib/cosmos/ext/.keep +0 -0
  816. data/lib/cosmos/gui/choosers/combobox_chooser.rb +141 -0
  817. data/lib/cosmos/gui/choosers/file_chooser.rb +85 -0
  818. data/lib/cosmos/gui/choosers/float_chooser.rb +67 -0
  819. data/lib/cosmos/gui/choosers/integer_chooser.rb +69 -0
  820. data/lib/cosmos/gui/choosers/string_chooser.rb +35 -0
  821. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -0
  822. data/lib/cosmos/gui/choosers/value_chooser.rb +67 -0
  823. data/lib/cosmos/gui/dialogs/about_dialog.rb +166 -0
  824. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +140 -0
  825. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +51 -0
  826. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +163 -0
  827. data/lib/cosmos/gui/dialogs/details_dialog.rb +190 -0
  828. data/lib/cosmos/gui/dialogs/exception_dialog.rb +106 -0
  829. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +60 -0
  830. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +272 -0
  831. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  832. data/lib/cosmos/gui/dialogs/legal_dialog.rb +183 -0
  833. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +97 -0
  834. data/lib/cosmos/gui/dialogs/progress_dialog.rb +313 -0
  835. data/lib/cosmos/gui/dialogs/pry_dialog.rb +169 -0
  836. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +51 -0
  837. data/lib/cosmos/gui/dialogs/select_dialog.rb +59 -0
  838. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +159 -0
  839. data/lib/cosmos/gui/dialogs/splash.rb +145 -0
  840. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +201 -0
  841. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +79 -0
  842. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +108 -0
  843. data/lib/cosmos/gui/line_graph/line_graph.rb +482 -0
  844. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +36 -0
  845. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +521 -0
  846. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +112 -0
  847. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +452 -0
  848. data/lib/cosmos/gui/line_graph/line_graph_script.rb +81 -0
  849. data/lib/cosmos/gui/line_graph/lines.rb +304 -0
  850. data/lib/cosmos/gui/line_graph/overview_graph.rb +474 -0
  851. data/lib/cosmos/gui/opengl/earth_model.rb +25 -0
  852. data/lib/cosmos/gui/opengl/gl_bounds.rb +55 -0
  853. data/lib/cosmos/gui/opengl/gl_light.rb +38 -0
  854. data/lib/cosmos/gui/opengl/gl_material.rb +28 -0
  855. data/lib/cosmos/gui/opengl/gl_scene.rb +78 -0
  856. data/lib/cosmos/gui/opengl/gl_shape.rb +150 -0
  857. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  858. data/lib/cosmos/gui/opengl/gl_viewport.rb +34 -0
  859. data/lib/cosmos/gui/opengl/moon_model.rb +25 -0
  860. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  861. data/lib/cosmos/gui/opengl/stl_reader.rb +210 -0
  862. data/lib/cosmos/gui/opengl/stl_shape.rb +127 -0
  863. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  864. data/lib/cosmos/gui/qt.rb +841 -0
  865. data/lib/cosmos/gui/qt_tool.rb +489 -0
  866. data/lib/cosmos/gui/text/completion.rb +402 -0
  867. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  868. data/lib/cosmos/gui/text/completion_text_edit.rb +194 -0
  869. data/lib/cosmos/gui/text/ruby_editor.rb +463 -0
  870. data/lib/cosmos/gui/utilities/analyze_log.rb +153 -0
  871. data/lib/cosmos/gui/utilities/screenshot.rb +33 -0
  872. data/lib/cosmos/gui/utilities/script_module_gui.rb +364 -0
  873. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +171 -0
  874. data/lib/cosmos/gui/widgets/packet_log_frame.rb +344 -0
  875. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  876. data/lib/cosmos/interfaces.rb +21 -0
  877. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +134 -0
  878. data/lib/cosmos/interfaces/interface.rb +449 -0
  879. data/lib/cosmos/interfaces/linc_interface.rb +459 -0
  880. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  881. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  882. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +114 -0
  883. data/lib/cosmos/interfaces/protocols/length_protocol.rb +147 -0
  884. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  885. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  886. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  887. data/lib/cosmos/interfaces/protocols/template_protocol.rb +240 -0
  888. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  889. data/lib/cosmos/interfaces/serial_interface.rb +81 -0
  890. data/lib/cosmos/interfaces/simulated_target_interface.rb +140 -0
  891. data/lib/cosmos/interfaces/stream_interface.rb +64 -0
  892. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  893. data/lib/cosmos/interfaces/tcpip_server_interface.rb +625 -0
  894. data/lib/cosmos/interfaces/udp_interface.rb +141 -0
  895. data/lib/cosmos/io/buffered_file.rb +101 -0
  896. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  897. data/lib/cosmos/io/io_multiplexer.rb +71 -0
  898. data/lib/cosmos/io/json_drb.rb +386 -0
  899. data/lib/cosmos/io/json_drb_object.rb +201 -0
  900. data/lib/cosmos/io/json_rpc.rb +365 -0
  901. data/lib/cosmos/io/posix_serial_driver.rb +147 -0
  902. data/lib/cosmos/io/raw_logger.rb +170 -0
  903. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  904. data/lib/cosmos/io/serial_driver.rb +94 -0
  905. data/lib/cosmos/io/stderr.rb +36 -0
  906. data/lib/cosmos/io/stdout.rb +36 -0
  907. data/lib/cosmos/io/udp_sockets.rb +152 -0
  908. data/lib/cosmos/io/win32_serial_driver.rb +165 -0
  909. data/lib/cosmos/packet_logs.rb +6 -0
  910. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -0
  911. data/lib/cosmos/packet_logs/packet_log_reader.rb +461 -0
  912. data/lib/cosmos/packet_logs/packet_log_writer.rb +341 -0
  913. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  914. data/lib/cosmos/packets/binary_accessor.rb +1201 -0
  915. data/lib/cosmos/packets/commands.rb +318 -0
  916. data/lib/cosmos/packets/limits.rb +264 -0
  917. data/lib/cosmos/packets/limits_response.rb +42 -0
  918. data/lib/cosmos/packets/packet.rb +994 -0
  919. data/lib/cosmos/packets/packet_config.rb +1393 -0
  920. data/lib/cosmos/packets/packet_item.rb +585 -0
  921. data/lib/cosmos/packets/packet_item_limits.rb +140 -0
  922. data/lib/cosmos/packets/parsers/format_string_parser.rb +59 -0
  923. data/lib/cosmos/packets/parsers/limits_parser.rb +147 -0
  924. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -0
  925. data/lib/cosmos/packets/parsers/macro_parser.rb +118 -0
  926. data/lib/cosmos/packets/parsers/packet_item_parser.rb +234 -0
  927. data/lib/cosmos/packets/parsers/packet_parser.rb +131 -0
  928. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -0
  929. data/lib/cosmos/packets/parsers/state_parser.rb +119 -0
  930. data/lib/cosmos/packets/structure.rb +508 -0
  931. data/lib/cosmos/packets/structure_item.rb +292 -0
  932. data/lib/cosmos/packets/telemetry.rb +444 -0
  933. data/lib/cosmos/processors.rb +6 -0
  934. data/lib/cosmos/processors/new_packet_log_processor.rb +39 -0
  935. data/lib/cosmos/processors/processor.rb +76 -0
  936. data/lib/cosmos/processors/statistics_processor.rb +70 -0
  937. data/lib/cosmos/processors/watermark_processor.rb +49 -0
  938. data/lib/cosmos/script.rb +9 -0
  939. data/lib/cosmos/script/api_shared.rb +972 -0
  940. data/lib/cosmos/script/cmd_tlm_server.rb +138 -0
  941. data/lib/cosmos/script/commands.rb +189 -0
  942. data/lib/cosmos/script/extract.rb +139 -0
  943. data/lib/cosmos/script/limits.rb +116 -0
  944. data/lib/cosmos/script/script.rb +76 -0
  945. data/lib/cosmos/script/scripting.rb +144 -0
  946. data/lib/cosmos/script/telemetry.rb +216 -0
  947. data/lib/cosmos/script/tools.rb +97 -0
  948. data/lib/cosmos/streams/serial_stream.rb +150 -0
  949. data/lib/cosmos/streams/stream.rb +54 -0
  950. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -0
  951. data/lib/cosmos/streams/tcpip_socket_stream.rb +186 -0
  952. data/lib/cosmos/system.rb +4 -0
  953. data/lib/cosmos/system/system.rb +778 -0
  954. data/lib/cosmos/system/target.rb +228 -0
  955. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +268 -0
  956. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +78 -0
  957. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +773 -0
  958. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  959. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  960. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  961. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  962. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1337 -0
  963. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +54 -0
  964. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +77 -0
  965. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +537 -0
  966. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +274 -0
  967. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +480 -0
  968. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +121 -0
  969. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -0
  970. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +213 -0
  971. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -0
  972. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +151 -0
  973. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +255 -0
  974. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +85 -0
  975. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +274 -0
  976. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +153 -0
  977. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +122 -0
  978. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +161 -0
  979. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  980. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +134 -0
  981. data/lib/cosmos/tools/config_editor/config_editor.rb +728 -0
  982. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +690 -0
  983. data/lib/cosmos/tools/data_viewer/data_viewer.rb +633 -0
  984. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +120 -0
  985. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  986. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -0
  987. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -0
  988. data/lib/cosmos/tools/launcher/launcher.rb +194 -0
  989. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -0
  990. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -0
  991. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -0
  992. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +972 -0
  993. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  994. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  995. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +608 -0
  996. data/lib/cosmos/tools/replay/replay.rb +517 -0
  997. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  998. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -0
  999. data/lib/cosmos/tools/script_runner/script_runner.rb +979 -0
  1000. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  1001. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1838 -0
  1002. data/lib/cosmos/tools/table_manager/table.rb +61 -0
  1003. data/lib/cosmos/tools/table_manager/table_config.rb +189 -0
  1004. data/lib/cosmos/tools/table_manager/table_item.rb +58 -0
  1005. data/lib/cosmos/tools/table_manager/table_item_parser.rb +46 -0
  1006. data/lib/cosmos/tools/table_manager/table_manager.rb +1152 -0
  1007. data/lib/cosmos/tools/table_manager/table_manager_core.rb +321 -0
  1008. data/lib/cosmos/tools/table_manager/table_parser.rb +75 -0
  1009. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  1010. data/lib/cosmos/tools/test_runner/test.rb +539 -0
  1011. data/lib/cosmos/tools/test_runner/test_runner.rb +1271 -0
  1012. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -0
  1013. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  1014. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1152 -0
  1015. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +441 -0
  1016. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  1017. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +92 -0
  1018. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  1019. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -0
  1020. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  1021. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +222 -0
  1022. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  1023. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  1024. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -0
  1025. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -0
  1026. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +422 -0
  1027. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  1028. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  1029. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +325 -0
  1030. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +191 -0
  1031. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  1032. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  1033. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  1034. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +173 -0
  1035. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  1036. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  1037. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +209 -0
  1038. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  1039. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  1040. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  1041. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -0
  1042. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +451 -0
  1043. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  1044. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -0
  1045. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  1046. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -0
  1047. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  1048. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  1049. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +103 -0
  1050. data/lib/cosmos/tools/tlm_viewer/screen.rb +502 -0
  1051. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +571 -0
  1052. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +293 -0
  1053. data/lib/cosmos/tools/tlm_viewer/widgets.rb +61 -0
  1054. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  1055. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -0
  1056. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -0
  1057. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  1058. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +33 -0
  1059. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +70 -0
  1060. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +77 -0
  1061. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +43 -0
  1062. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +59 -0
  1063. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +44 -0
  1064. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +54 -0
  1065. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +53 -0
  1066. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +63 -0
  1067. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +123 -0
  1068. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +38 -0
  1069. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  1070. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +31 -0
  1071. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  1072. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  1073. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  1074. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  1075. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  1076. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  1077. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  1078. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  1079. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +57 -0
  1080. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  1081. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  1082. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +38 -0
  1083. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  1084. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +39 -0
  1085. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  1086. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +113 -0
  1087. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +116 -0
  1088. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +102 -0
  1089. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +116 -0
  1090. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +63 -0
  1091. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +58 -0
  1092. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  1093. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  1094. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +38 -0
  1095. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +65 -0
  1096. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +65 -0
  1097. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  1098. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  1099. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  1100. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  1101. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  1102. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  1103. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  1104. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  1105. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +91 -0
  1106. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  1107. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  1108. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  1109. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  1110. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  1111. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +37 -0
  1112. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  1113. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +37 -0
  1114. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +36 -0
  1115. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +38 -0
  1116. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  1117. data/lib/cosmos/top_level.rb +790 -0
  1118. data/lib/cosmos/utilities.rb +11 -0
  1119. data/lib/cosmos/utilities/crc.rb +268 -0
  1120. data/lib/cosmos/utilities/csv.rb +137 -0
  1121. data/lib/cosmos/utilities/logger.rb +137 -0
  1122. data/lib/cosmos/utilities/low_fragmentation_array.rb +19 -0
  1123. data/lib/cosmos/utilities/message_log.rb +79 -0
  1124. data/lib/cosmos/utilities/quaternion.rb +258 -0
  1125. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  1126. data/lib/cosmos/utilities/simulated_target.rb +100 -0
  1127. data/lib/cosmos/utilities/sleeper.rb +44 -0
  1128. data/lib/cosmos/version.rb +12 -0
  1129. data/lib/cosmos/win32/excel.rb +66 -0
  1130. data/lib/cosmos/win32/win32.rb +387 -0
  1131. data/lib/cosmos/win32/win32_main.rb +325 -0
  1132. data/roodi.yml +24 -0
  1133. data/run_gui_tests.bat +44 -0
  1134. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  1135. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  1136. data/spec/config/config_parser_spec.rb +353 -0
  1137. data/spec/conversions/conversion_spec.rb +31 -0
  1138. data/spec/conversions/generic_conversion_spec.rb +45 -0
  1139. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  1140. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  1141. data/spec/conversions/processor_conversion_spec.rb +45 -0
  1142. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  1143. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  1144. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  1145. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  1146. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  1147. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1148. data/spec/core_ext/array_spec.rb +247 -0
  1149. data/spec/core_ext/class_spec.rb +36 -0
  1150. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1151. data/spec/core_ext/exception_spec.rb +91 -0
  1152. data/spec/core_ext/file_spec.rb +72 -0
  1153. data/spec/core_ext/hash_spec.rb +24 -0
  1154. data/spec/core_ext/io_spec.rb +46 -0
  1155. data/spec/core_ext/kernel_spec.rb +54 -0
  1156. data/spec/core_ext/math_spec.rb +116 -0
  1157. data/spec/core_ext/matrix_spec.rb +127 -0
  1158. data/spec/core_ext/objectspace_spec.rb +32 -0
  1159. data/spec/core_ext/range_spec.rb +21 -0
  1160. data/spec/core_ext/socket_spec.rb +32 -0
  1161. data/spec/core_ext/string_spec.rb +239 -0
  1162. data/spec/core_ext/stringio_spec.rb +21 -0
  1163. data/spec/core_ext/time_spec.rb +220 -0
  1164. data/spec/gui/line_graph/line_clip_spec.rb +324 -0
  1165. data/spec/gui/qt_spec.rb +104 -0
  1166. data/spec/install/config/system/system.txt +27 -0
  1167. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1168. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1169. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1170. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1171. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1172. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -0
  1173. data/spec/install/config/targets/INST/target.txt +10 -0
  1174. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1175. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  1176. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  1177. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  1178. data/spec/install/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  1179. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  1180. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  1181. data/spec/install/lib/README.txt +1 -0
  1182. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +146 -0
  1183. data/spec/interfaces/interface_spec.rb +514 -0
  1184. data/spec/interfaces/linc_interface_spec.rb +248 -0
  1185. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  1186. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  1187. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  1188. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  1189. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  1190. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  1191. data/spec/interfaces/protocols/template_protocol_spec.rb +322 -0
  1192. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  1193. data/spec/interfaces/serial_interface_spec.rb +57 -0
  1194. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1195. data/spec/interfaces/tcpip_client_interface_spec.rb +60 -0
  1196. data/spec/interfaces/tcpip_server_interface_spec.rb +157 -0
  1197. data/spec/interfaces/udp_interface_spec.rb +246 -0
  1198. data/spec/io/buffered_file_spec.rb +113 -0
  1199. data/spec/io/io_multiplexer_spec.rb +102 -0
  1200. data/spec/io/json_drb_object_spec.rb +119 -0
  1201. data/spec/io/json_drb_spec.rb +297 -0
  1202. data/spec/io/json_rpc_spec.rb +264 -0
  1203. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1204. data/spec/io/raw_logger_spec.rb +137 -0
  1205. data/spec/io/serial_driver_spec.rb +62 -0
  1206. data/spec/io/stderr_spec.rb +32 -0
  1207. data/spec/io/stdout_spec.rb +32 -0
  1208. data/spec/io/udp_sockets_spec.rb +99 -0
  1209. data/spec/io/win32_serial_driver_spec.rb +91 -0
  1210. data/spec/packet_logs/packet_log_reader_spec.rb +553 -0
  1211. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1212. data/spec/packet_logs/packet_log_writer_spec.rb +227 -0
  1213. data/spec/packets/binary_accessor_spec.rb +2326 -0
  1214. data/spec/packets/commands_spec.rb +379 -0
  1215. data/spec/packets/limits_response_spec.rb +25 -0
  1216. data/spec/packets/limits_spec.rb +344 -0
  1217. data/spec/packets/packet_config_spec.rb +960 -0
  1218. data/spec/packets/packet_item_limits_spec.rb +188 -0
  1219. data/spec/packets/packet_item_spec.rb +386 -0
  1220. data/spec/packets/packet_spec.rb +1456 -0
  1221. data/spec/packets/parsers/format_string_parser_spec.rb +133 -0
  1222. data/spec/packets/parsers/limits_parser_spec.rb +293 -0
  1223. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -0
  1224. data/spec/packets/parsers/macro_parser_spec.rb +220 -0
  1225. data/spec/packets/parsers/packet_item_parser_spec.rb +366 -0
  1226. data/spec/packets/parsers/packet_parser_spec.rb +99 -0
  1227. data/spec/packets/parsers/processor_parser_spec.rb +114 -0
  1228. data/spec/packets/parsers/state_parser_spec.rb +189 -0
  1229. data/spec/packets/structure_item_spec.rb +213 -0
  1230. data/spec/packets/structure_spec.rb +565 -0
  1231. data/spec/packets/telemetry_spec.rb +578 -0
  1232. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1233. data/spec/processors/processor_spec.rb +55 -0
  1234. data/spec/processors/statistics_processor_spec.rb +60 -0
  1235. data/spec/processors/watermark_processor_spec.rb +51 -0
  1236. data/spec/script/cmd_tlm_server_spec.rb +176 -0
  1237. data/spec/script/commands_disconnect_spec.rb +270 -0
  1238. data/spec/script/commands_spec.rb +303 -0
  1239. data/spec/script/extract_spec.rb +158 -0
  1240. data/spec/script/limits_spec.rb +153 -0
  1241. data/spec/script/script_spec.rb +90 -0
  1242. data/spec/script/scripting_spec.rb +745 -0
  1243. data/spec/script/telemetry_spec.rb +176 -0
  1244. data/spec/script/tools_spec.rb +134 -0
  1245. data/spec/spec_helper.rb +225 -0
  1246. data/spec/streams/serial_stream_spec.rb +122 -0
  1247. data/spec/streams/stream_spec.rb +30 -0
  1248. data/spec/streams/tcpip_client_stream_spec.rb +65 -0
  1249. data/spec/streams/tcpip_socket_stream_spec.rb +226 -0
  1250. data/spec/system/system_spec.rb +891 -0
  1251. data/spec/system/target_spec.rb +304 -0
  1252. data/spec/tools/cmd_tlm_server/api_spec.rb +1123 -0
  1253. data/spec/tools/cmd_tlm_server/background_task_spec.rb +44 -0
  1254. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +227 -0
  1255. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +610 -0
  1256. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +431 -0
  1257. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -0
  1258. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -0
  1259. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +401 -0
  1260. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -0
  1261. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  1262. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1263. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +191 -0
  1264. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -0
  1265. data/spec/tools/launcher/launcher_config_spec.rb +474 -0
  1266. data/spec/tools/table_manager/table_config_spec.rb +226 -0
  1267. data/spec/tools/table_manager/table_item_parser_spec.rb +61 -0
  1268. data/spec/tools/table_manager/table_item_spec.rb +57 -0
  1269. data/spec/tools/table_manager/table_parser_spec.rb +96 -0
  1270. data/spec/tools/table_manager/table_spec.rb +90 -0
  1271. data/spec/tools/table_manager/tablemanager_core_spec.rb +556 -0
  1272. data/spec/top_level/top_level_spec.rb +373 -0
  1273. data/spec/utilities/crc_spec.rb +45 -0
  1274. data/spec/utilities/csv_spec.rb +139 -0
  1275. data/spec/utilities/logger_spec.rb +102 -0
  1276. data/spec/utilities/message_log_spec.rb +89 -0
  1277. data/spec/utilities/quaternion_spec.rb +107 -0
  1278. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1279. data/tasks/gemfile_stats.rake +79 -0
  1280. data/tasks/manifest.rake +22 -0
  1281. data/tasks/spec.rake +23 -0
  1282. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  1283. data/test/benchmarks/gsub_benchmark.rb +152 -0
  1284. data/test/benchmarks/is_a_benchmark.rb +34 -0
  1285. data/test/performance/PACKETS.bat +1 -0
  1286. data/test/performance/Rakefile +77 -0
  1287. data/test/performance/THREADS.bat +1 -0
  1288. data/test/performance/config/data/attitude.bin +0 -0
  1289. data/test/performance/config/data/crc.txt +196 -0
  1290. data/test/performance/config/data/diamond.STL +58 -0
  1291. data/test/performance/config/data/groundoff.gif +0 -0
  1292. data/test/performance/config/data/groundon.gif +0 -0
  1293. data/test/performance/config/data/hselectoff.gif +0 -0
  1294. data/test/performance/config/data/hselecton.gif +0 -0
  1295. data/test/performance/config/data/hswitchoff.gif +0 -0
  1296. data/test/performance/config/data/hswitchon.gif +0 -0
  1297. data/test/performance/config/data/meta_init.txt +4 -0
  1298. data/test/performance/config/data/position.bin +0 -0
  1299. data/test/performance/config/data/poweroff.gif +0 -0
  1300. data/test/performance/config/data/poweron.gif +0 -0
  1301. data/test/performance/config/data/satellite.gif +0 -0
  1302. data/test/performance/config/data/tada.wav +0 -0
  1303. data/test/performance/config/data/vswitchoff.gif +0 -0
  1304. data/test/performance/config/data/vswitchon.gif +0 -0
  1305. data/test/performance/config/system/system_packets.txt +38 -0
  1306. data/test/performance/config/system/system_threads.txt +58 -0
  1307. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -0
  1308. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1309. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1310. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1311. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  1312. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  1313. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  1314. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  1315. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -0
  1316. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  1317. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  1318. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  1319. data/test/performance/config/targets/PACKET/target.txt +28 -0
  1320. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  1321. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -0
  1322. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -0
  1323. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  1324. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -0
  1325. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  1326. data/test/performance/config/targets/THREAD/target.txt +7 -0
  1327. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -0
  1328. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  1329. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  1330. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  1331. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  1332. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  1333. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  1334. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  1335. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  1336. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  1337. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  1338. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  1339. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  1340. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  1341. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  1342. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  1343. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  1344. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  1345. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -0
  1346. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -0
  1347. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  1348. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  1349. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  1350. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  1351. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  1352. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  1353. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  1354. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  1355. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  1356. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  1357. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  1358. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  1359. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  1360. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  1361. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  1362. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  1363. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -0
  1364. data/test/performance/lib/packet_target.rb +126 -0
  1365. data/test/performance/lib/thread_target.rb +120 -0
  1366. data/test/performance/lib/user_version.rb +3 -0
  1367. data/test/performance/outputs/handbooks/README.txt +1 -0
  1368. data/test/performance/outputs/logs/README.txt +1 -0
  1369. data/test/performance/outputs/saved_config/README.txt +1 -0
  1370. data/test/performance/outputs/tables/README.txt +1 -0
  1371. data/test/performance/outputs/tmp/README.txt +1 -0
  1372. data/test/performance/procedures/checks.rb +11 -0
  1373. data/test/performance/procedures/clear_util.rb +7 -0
  1374. data/test/performance/procedures/collect.rb +18 -0
  1375. data/test/performance/procedures/collect_util.rb +14 -0
  1376. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  1377. data/test/performance/procedures/disconnect.rb +29 -0
  1378. data/test/performance/procedures/example_test.rb +182 -0
  1379. data/test/performance/procedures/plot_test.rb +8 -0
  1380. data/test/performance/procedures/procedure.rb +3 -0
  1381. data/test/performance/procedures/run_example_test.rb +3 -0
  1382. data/test/performance/procedures/test.rb +51 -0
  1383. data/test/performance/tools/CmdExtractor +14 -0
  1384. data/test/performance/tools/CmdExtractor.bat +59 -0
  1385. data/test/performance/tools/CmdSender +14 -0
  1386. data/test/performance/tools/CmdSender.bat +59 -0
  1387. data/test/performance/tools/CmdTlmServer +16 -0
  1388. data/test/performance/tools/CmdTlmServer.bat +59 -0
  1389. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  1390. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  1391. data/test/performance/tools/DataViewer +14 -0
  1392. data/test/performance/tools/DataViewer.bat +59 -0
  1393. data/test/performance/tools/HandbookCreator +14 -0
  1394. data/test/performance/tools/HandbookCreator.bat +61 -0
  1395. data/test/performance/tools/Launcher +14 -0
  1396. data/test/performance/tools/Launcher.bat +59 -0
  1397. data/test/performance/tools/LimitsMonitor +14 -0
  1398. data/test/performance/tools/LimitsMonitor.bat +59 -0
  1399. data/test/performance/tools/OpenGLBuilder +14 -0
  1400. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  1401. data/test/performance/tools/PacketTarget +14 -0
  1402. data/test/performance/tools/PacketTarget.bat +59 -0
  1403. data/test/performance/tools/PacketViewer +14 -0
  1404. data/test/performance/tools/PacketViewer.bat +59 -0
  1405. data/test/performance/tools/Replay +14 -0
  1406. data/test/performance/tools/Replay.bat +59 -0
  1407. data/test/performance/tools/ScpiTarget +14 -0
  1408. data/test/performance/tools/ScpiTarget.bat +59 -0
  1409. data/test/performance/tools/ScriptRunner +14 -0
  1410. data/test/performance/tools/ScriptRunner.bat +59 -0
  1411. data/test/performance/tools/TableManager +14 -0
  1412. data/test/performance/tools/TableManager.bat +59 -0
  1413. data/test/performance/tools/TestRunner +14 -0
  1414. data/test/performance/tools/TestRunner.bat +59 -0
  1415. data/test/performance/tools/ThreadTarget +14 -0
  1416. data/test/performance/tools/ThreadTarget.bat +59 -0
  1417. data/test/performance/tools/TlmExtractor +14 -0
  1418. data/test/performance/tools/TlmExtractor.bat +59 -0
  1419. data/test/performance/tools/TlmGrapher +14 -0
  1420. data/test/performance/tools/TlmGrapher.bat +59 -0
  1421. data/test/performance/tools/TlmGrapherMemProf +19 -0
  1422. data/test/performance/tools/TlmGrapherMemProf.bat +59 -0
  1423. data/test/performance/tools/TlmViewer +14 -0
  1424. data/test/performance/tools/TlmViewer.bat +59 -0
  1425. data/test/performance/tools/TlmViewerMemProf +19 -0
  1426. data/test/performance/tools/TlmViewerMemProf.bat +59 -0
  1427. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  1428. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  1429. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  1430. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1431. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  1432. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  1433. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  1434. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  1435. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  1436. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  1437. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  1438. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  1439. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  1440. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  1441. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  1442. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  1443. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  1444. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  1445. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  1446. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  1447. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  1448. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  1449. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  1450. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  1451. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  1452. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  1453. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  1454. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  1455. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  1456. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  1457. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  1458. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  1459. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  1460. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  1461. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  1462. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  1463. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  1464. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  1465. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  1466. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  1467. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  1468. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  1469. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  1470. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  1471. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  1472. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  1473. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  1474. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  1475. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  1476. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  1477. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  1478. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  1479. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  1480. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  1481. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  1482. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1483. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  1484. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  1485. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  1486. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  1487. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  1488. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  1489. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  1490. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  1491. metadata +1964 -0
@@ -0,0 +1,69 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+
13
+ module Cosmos
14
+
15
+ # Represents a plot
16
+ class Plot
17
+
18
+ # Tab containing this plot
19
+ attr_accessor :tab
20
+
21
+ # Array of data objects in the plot
22
+ attr_accessor :data_objects
23
+
24
+ # GUI object associated with this plot
25
+ attr_accessor :gui_object
26
+
27
+ # Type of plot
28
+ attr_accessor :plot_type
29
+
30
+ # Flag to indicate if plot redraw is needed
31
+ attr_accessor :redraw_needed
32
+
33
+ # Creates a new Plot
34
+ def initialize
35
+ @tab = nil
36
+ @data_objects = []
37
+ @gui_object = nil
38
+ @redraw_needed = false
39
+
40
+ # Type is classname without Plot
41
+ @plot_type = self.class.to_s[0..-5].upcase
42
+ @plot_type = @plot_type.split("::")[-1] # Remove Cosmos:: if present
43
+ end # def initialize
44
+
45
+ # Returns the configuration lines used to create this plot
46
+ def configuration_string
47
+ string = " PLOT #{@plot_type}\n"
48
+ string << plot_configuration_string()
49
+ @data_objects.each do |data_object|
50
+ string << data_object.configuration_string
51
+ end
52
+ string
53
+ end # def configuration_string
54
+
55
+ # Handles plot specific keywords
56
+ def handle_keyword(parser, keyword, parameters)
57
+ raise ArgumentError, "Unknown keyword received by #{self.class}: #{keyword}"
58
+ end # def handle_keyword
59
+
60
+ protected
61
+
62
+ # Plot specific configuration string
63
+ def plot_configuration_string
64
+ return ''
65
+ end
66
+
67
+ end # class Plot
68
+
69
+ end # module Cosmos
@@ -0,0 +1,20 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/tools/tlm_grapher/plots/xy_plot'
13
+
14
+ module Cosmos
15
+
16
+ # Represents a X-Y plot with a single point on the graph
17
+ class SinglexyPlot < XyPlot
18
+ end
19
+
20
+ end # module Cosmos
@@ -0,0 +1,61 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/tools/tlm_grapher/plots/linegraph_plot'
13
+
14
+ module Cosmos
15
+
16
+ # Represents an X-Y plot
17
+ class XyPlot < LinegraphPlot
18
+
19
+ # Manual x scale array of x_min and x_max
20
+ attr_accessor :manual_x_scale
21
+
22
+ # Creates a new plot
23
+ def initialize
24
+ super()
25
+ @show_lines = false
26
+ @x_axis_title = nil
27
+ @manual_x_scale = nil
28
+ @unix_epoch_x_values = false
29
+ end # def initialize
30
+
31
+ # Handles plot specific keywords
32
+ def handle_keyword(parser, keyword, parameters)
33
+ case keyword
34
+ when 'MANUAL_X_AXIS_SCALE'
35
+ # Expect 2 parameters
36
+ parser.verify_num_parameters(2, 2, "MANUAL_X_AXIS_SCALE <X Min> <X Max>")
37
+ manual_scale = []
38
+ manual_scale[0] = parameters[0].to_f
39
+ manual_scale[1] = parameters[1].to_f
40
+ @manual_x_scale = manual_scale
41
+
42
+ else
43
+ # Unknown keywords are passed to parent data object
44
+ super(parser, keyword, parameters)
45
+
46
+ end # case keyword
47
+
48
+ end # def handle_keyword
49
+
50
+ protected
51
+
52
+ # Returns the configuration lines used to create this plot
53
+ def plot_configuration_string
54
+ string = super()
55
+ string << " MANUAL_X_AXIS_SCALE #{@manual_x_scale[0]} #{@manual_x_scale[1]}\n" if @manual_x_scale
56
+ string
57
+ end # def plot_configuration_string
58
+
59
+ end # class XyPlot
60
+
61
+ end # module Cosmos
@@ -0,0 +1,1291 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/gui/utilities/screenshot'
13
+ require 'cosmos/gui/line_graph/overview_graph'
14
+ require 'cosmos/gui/choosers/integer_chooser'
15
+ require 'cosmos/gui/choosers/float_chooser'
16
+ require 'cosmos/gui/choosers/string_chooser'
17
+ require 'cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor'
18
+ require 'cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor'
19
+ require 'cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object'
20
+ require 'cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object'
21
+ require 'cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object'
22
+ require 'cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder'
23
+ require 'cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder'
24
+ require 'cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder'
25
+
26
+ module Cosmos
27
+
28
+ # Implements a widget to display a set of plots in tabs with an overview graph
29
+ class OverviewTabbedPlots < Qt::Widget
30
+ slots 'handle_tab_change(int)'
31
+ slots 'tab_context_menu(const QPoint&)'
32
+ slots 'plot_context_menu(const QPoint&)'
33
+ slots 'data_object_context_menu(const QPoint&)'
34
+ slots 'data_object_moved(const QModelIndex&, int, int, const QModelIndex&, int)'
35
+
36
+ # Minimum Overview Points Per Line
37
+ MINIMUM_OVERVIEW_POINTS_PLOTTED = 100
38
+
39
+ # Minimum delay between redraws
40
+ MINIMUM_REFRESH_DELAY_MS = 10
41
+
42
+ # Accessor to tabbed_plots_config
43
+ attr_accessor :tabbed_plots_config
44
+
45
+ # Accessor to adders
46
+ attr_accessor :data_object_adders
47
+
48
+ # Callback when right button is released on a tab item
49
+ attr_accessor :tab_item_right_button_release_callback
50
+
51
+ # Callback when right button is released on a plot
52
+ attr_accessor :plot_right_button_release_callback
53
+
54
+ # Callback when right button is released on a data object
55
+ attr_accessor :data_object_right_button_release_callback
56
+
57
+ # Callback when a change to modifies the configuration occurs
58
+ attr_accessor :config_modified_callback
59
+
60
+ # Give access to the status bar to other widgets
61
+ attr_reader :status_bar
62
+
63
+ def initialize(parent, left_frame, right_frame, status_bar)
64
+ super(parent)
65
+ # Save Constructor Arguments
66
+ @left_frame = left_frame
67
+ @right_frame = right_frame
68
+ @status_bar = status_bar
69
+
70
+ # Default startup arguments
71
+ @tabbed_plots_config = nil
72
+ @adder_orientation = Qt::Horizontal
73
+
74
+ # Additional instance variables
75
+ @data_object_adders = []
76
+ @tab_item_right_button_release_callback = nil
77
+ @plot_right_button_release_callback = nil
78
+ @data_object_right_button_release_callback = nil
79
+ @config_modified_callback = nil
80
+ @paused = false
81
+ @timeout = nil
82
+ @refresh_rate_ms = (1000.0 / TabbedPlotsConfig::DEFAULT_REFRESH_RATE_HZ).round
83
+ @context_menu_plot = nil
84
+ end # def initialize
85
+
86
+ # Startup GUI interaction
87
+ def startup(tabbed_plots_config, adder_orientation, adder_types)
88
+ # Save parameters
89
+ @tabbed_plots_config = tabbed_plots_config
90
+ @adder_orientation = adder_orientation
91
+ @adder_types = adder_types
92
+
93
+ # Create GUI elements
94
+ build_right_frame()
95
+ build_left_frame()
96
+ create()
97
+ end # def startup
98
+
99
+ # Shutdown GUI interaction
100
+ def shutdown
101
+ # Shutdown drawing timeout
102
+ @timeout.method_missing(:stop) if @timeout
103
+
104
+ # Remove GUI elements
105
+ @tabbed_plots_left_frame.removeAll
106
+ @tabbed_plots_right_frame.removeAll
107
+ end # def shutdown
108
+
109
+ # Update
110
+ def update
111
+ @data_object_adders.each {|adder| adder.update}
112
+ end
113
+
114
+ ###############################################################################
115
+ # Pause / Resume
116
+ ###############################################################################
117
+
118
+ # Pause plotting
119
+ def pause
120
+ @paused = true
121
+ end # def pause
122
+
123
+ # Resume plotting if paused
124
+ def resume
125
+ @paused = false
126
+ end # def resume
127
+
128
+ # Are we paused?
129
+ def paused?
130
+ @paused
131
+ end # def paused?
132
+
133
+ ###############################################################################
134
+ # Tab Related Methods
135
+ ###############################################################################
136
+
137
+ # Add a new tab
138
+ def add_tab(tab_text = nil)
139
+ unless tab_text
140
+ # If the last tab text is "Tab X" the next tab should be "Tab X+1"
141
+ if (@tabbed_plots_config.tabs.length > 0) &&
142
+ (@tabbed_plots_config.tabs[-1].tab_text =~ /Tab (\d*)/)
143
+ tab_text = "Tab #{$1.to_i + 1}" # $1 is the match from the regexp
144
+ else # Set text to the total number of tabs
145
+ tab_text = "Tab #{@tabbed_plots_config.tabs.length + 1}"
146
+ end
147
+ end
148
+ tab = @tabbed_plots_config.add_tab(tab_text)
149
+
150
+ # Create tab item for the tab
151
+ tab_item = Qt::Widget.new
152
+ tab_item.setContextMenuPolicy(Qt::CustomContextMenu)
153
+ connect(tab_item, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('plot_context_menu(const QPoint&)'))
154
+ tab.gui_item = tab_item
155
+
156
+ # Create overall vertical layout manager for tab.
157
+ tab_layout = Qt::VBoxLayout.new()
158
+ tab_item.setLayout(tab_layout)
159
+ tab.gui_frame = tab_layout
160
+
161
+ # Create layout manager to hold plots based on number of plots
162
+ layout = Qt::AdaptiveGridLayout.new
163
+ tab_layout.addLayout(layout, 1) # Add with stretch factor 1 to give it priority over everything else
164
+ # Add stretch in case they delete the last plot. This will force the overview graph (which doesn't get deleted)
165
+ # to stay at the bottom of the layout instead of moving
166
+ tab_layout.addStretch()
167
+ tab.gui_layout = layout
168
+
169
+ # Add an overview graph to the tab
170
+ @overview_graphs << OverviewGraph.new(self)
171
+ @overview_graphs[-1].callback = method(:overview_graph_callback)
172
+ @overview_graphs[-1].window_size = @seconds_plotted.value
173
+ tab_layout.addWidget(@overview_graphs[-1])
174
+
175
+ # Add an initial plot to the tab
176
+ add_plot(-1, false)
177
+
178
+ # Add and select the new tab
179
+ index = @tab_book.addTab(tab_item, tab_text)
180
+ @tab_book.setCurrentIndex(index)
181
+ @config_modified_callback.call() if @config_modified_callback
182
+ end # def add_tab
183
+
184
+ # Delete a tab - defaults to the current tab
185
+ def delete_tab(tab_index = nil)
186
+ # Select the current tab by default
187
+ tab_index = current_tab_index() unless tab_index
188
+
189
+ if tab_index
190
+ # Remove from config
191
+ @tabbed_plots_config.remove_tab(tab_index)
192
+
193
+ # Remove knowledge of overview graph
194
+ @overview_graphs.delete_at(tab_index)
195
+
196
+ # Remove tab item and frame from tab book
197
+ @tab_book.widget(tab_index).dispose
198
+
199
+ # Call tab change callback @tab_book.current is not valid at this point
200
+ if tab_index > (@tabbed_plots_config.tabs.length - 1)
201
+ @tab_book.setCurrentIndex(tab_index - 1)
202
+ else
203
+ @tab_book.setCurrentIndex(tab_index)
204
+ end
205
+ end
206
+ @config_modified_callback.call() if @config_modified_callback
207
+ end # def delete_tab
208
+
209
+ # Edit a tab - defaults to the current tab
210
+ def edit_tab(tab_index = nil)
211
+ edited = false
212
+
213
+ # Select the current tab by default
214
+ tab_index = current_tab_index() unless tab_index
215
+
216
+ if tab_index
217
+ # Get the tab object
218
+ tab = @tabbed_plots_config.tabs[tab_index]
219
+
220
+ # Create simple dialog box to edit the tab
221
+ result = Qt::Boolean.new
222
+ string = Qt::InputDialog::getText(self,
223
+ "Edit Tab",
224
+ "Tab Text:",
225
+ Qt::LineEdit::Normal,
226
+ tab.tab_text,
227
+ result)
228
+ if !result.nil? and not string.strip.empty? and @tab_book.tabText(tab_index) != string
229
+ tab.tab_text = string
230
+ @tab_book.setTabText(tab_index, string)
231
+ edited = true
232
+ @config_modified_callback.call() if @config_modified_callback
233
+ end
234
+ end
235
+
236
+ return edited
237
+ end # def edit_tab
238
+
239
+ # Export all data objects on a tab - defaults to current tab
240
+ def export_tab(filename, progress, tab_index = nil)
241
+ # Select the current tab by default
242
+ tab_index = current_tab_index() unless tab_index
243
+
244
+ if tab_index
245
+ # Export the tab's data objects
246
+ export_data_objects(filename, progress, tab_index) if @tabbed_plots_config.tabs[tab_index]
247
+ end
248
+ end # def export_tab
249
+
250
+ # Reset all data objects on a tab - defaults to current tab
251
+ def reset_tab(tab_index = nil)
252
+ # Select the current tab by default
253
+ tab_index = current_tab_index() unless tab_index
254
+
255
+ # Reset the data objects
256
+ reset_data_objects(tab_index) if tab_index
257
+ end
258
+
259
+ # Take screenshot of current tab and write to filename
260
+ def screenshot_tab(filename)
261
+ # Select the current tab
262
+ tab_index = current_tab_index()
263
+
264
+ if tab_index
265
+ # Take screenshot
266
+ Screenshot.screenshot_window(@tab_book.currentWidget(), filename)
267
+ end
268
+ end # def screenshot_tab
269
+
270
+ # Returns the index of the current tab or nil if no tabs exist
271
+ def current_tab_index
272
+ tab_index = -1
273
+ unless @tabbed_plots_config.tabs.empty?
274
+ Qt.execute_in_main_thread(true) do
275
+ tab_index = @tab_book.currentIndex
276
+ end
277
+ end
278
+ return tab_index if tab_index >= 0
279
+ nil
280
+ end # def current_tab_index
281
+
282
+ # Indicates if the tab has any data objects
283
+ def tab_has_data_objects?(tab_index = nil)
284
+ # Select the current tab by default
285
+ tab_index = current_tab_index() unless tab_index
286
+
287
+ return_value = false
288
+ if tab_index
289
+ @tabbed_plots_config.mu_synchronize do
290
+ @tabbed_plots_config.tabs[tab_index].plots.each do |plot|
291
+ if not plot.data_objects.empty?
292
+ return_value = true
293
+ break
294
+ end
295
+ end
296
+ end
297
+ end
298
+
299
+ return_value
300
+ end
301
+
302
+ ###############################################################################
303
+ # Plot Related Methods
304
+ ###############################################################################
305
+
306
+ # Add a new plot to a tab - defaults to the current tab
307
+ def add_plot(tab_index = nil, dialog = true)
308
+ # Select the current tab by default
309
+ tab_index = current_tab_index() unless tab_index
310
+
311
+ if tab_index
312
+ # Get Tab
313
+ tab = @tabbed_plots_config.tabs[tab_index]
314
+
315
+ # Add to config
316
+ if dialog
317
+ plot_editor = TabbedPlotsPlotEditor.new(self,
318
+ 'Add Plot',
319
+ @tabbed_plots_config.plot_types)
320
+ plot = plot_editor.execute
321
+ plot_editor.dispose
322
+ else
323
+ plot = @tabbed_plots_config.create_plot(@tabbed_plots_config.plot_types[0])
324
+ end
325
+ if plot
326
+ @tabbed_plots_config.add_plot(tab_index, plot)
327
+ @status_bar.showMessage(tr("Add Plot Succeeded"))
328
+ else
329
+ @status_bar.showMessage(tr("Add Plot Canceled"))
330
+ return false
331
+ end
332
+
333
+ # Create new plot gui object
334
+ filename = plot.plot_type.downcase + '_plot_gui_object.rb'
335
+ gui_object = Cosmos.require_class(filename).new(tab.gui_item, tab, plot, self)
336
+ tab.gui_layout.addWidget(gui_object)
337
+ plot.gui_object = gui_object
338
+ #~ plot.gui_object.connect(SEL_RIGHTBUTTONRELEASE, method(:handle_plot_right_button_release))
339
+ if plot.gui_object.respond_to? :mouse_left_button_press_callback
340
+ current_tab = tab
341
+ plot.gui_object.mouse_left_button_press_callback = lambda do |calling_gui_object|
342
+ current_tab.plots.each_with_index do |current_plot, index|
343
+ if current_plot.gui_object == calling_gui_object
344
+ select_plot(current_plot)
345
+ else
346
+ unselect_plot(current_plot)
347
+ end
348
+ end
349
+ @overview_graphs[@tab_book.currentIndex].setFocus
350
+ end
351
+ end
352
+
353
+ # Auto-select plot
354
+ unselect_all_plots(tab_index)
355
+ select_plot(plot)
356
+ end
357
+ @config_modified_callback.call() if @config_modified_callback
358
+ return true
359
+ end # def add_plot
360
+
361
+ # Delete a plot - defaults to the selected plot on the current tab
362
+ def delete_plot(tab_index = nil, plot_index = nil)
363
+ # Select the current tab by default
364
+ tab_index = current_tab_index() unless tab_index
365
+
366
+ # Select selected plot by default
367
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
368
+
369
+ # Make sure the plot exists
370
+ if plot_index
371
+ # Get Tab
372
+ tab = @tabbed_plots_config.tabs[tab_index]
373
+
374
+ # Remove from config
375
+ plot = @tabbed_plots_config.remove_plot(tab_index, plot_index)
376
+
377
+ # Potentially clear data object list
378
+ clear_data_object_list() if plot.gui_object.selected?
379
+
380
+ # Remove the widget
381
+ tab.gui_layout.removeWidget(plot.gui_object)
382
+ plot.gui_object.dispose
383
+
384
+ # Create new layout
385
+ layout = Qt::AdaptiveGridLayout.new
386
+
387
+ # Add existing gui objects into new layout
388
+ (0...tab.gui_layout.count).each do |index|
389
+ layout.addWidget(tab.gui_layout.takeAt(0).widget)
390
+ end
391
+
392
+ # Select the first plot just to be nice
393
+ select_plot(tab.plots[0]) if tab.plots[0]
394
+
395
+ # Remove existing layout from frame
396
+ tab.gui_frame.removeItem(tab.gui_layout)
397
+ # Assign new layout to tab
398
+ tab.gui_frame.insertLayout(0, layout, 1)
399
+ tab.gui_layout = layout
400
+ #~ tab.gui_layout.connect(SEL_RIGHTBUTTONRELEASE, method(:handle_plot_right_button_release))
401
+
402
+ @status_bar.showMessage(tr("Plot Deleted"))
403
+ @config_modified_callback.call() if @config_modified_callback
404
+ else
405
+ Qt::MessageBox.information(self, 'Information', 'Please select a plot')
406
+ end
407
+ end # def delete_plot
408
+
409
+ # Edit a plot - defaults to the selected plot on the current tab
410
+ def edit_plot(tab_index = nil, plot_index = nil)
411
+ edited = false
412
+
413
+ # Select the current tab by default
414
+ tab_index = current_tab_index() unless tab_index
415
+
416
+ if tab_index
417
+ # Get tab
418
+ tab = @tabbed_plots_config.tabs[tab_index]
419
+
420
+ # Select selected plot by default
421
+ plot_index = selected_plot_index(tab_index) unless plot_index
422
+ unless plot_index
423
+ Qt::MessageBox.information(self, 'Information', 'Please select a plot')
424
+ return
425
+ end
426
+ plot = tab.plots[plot_index]
427
+
428
+ # Edit Plot
429
+ plot_editor = TabbedPlotsPlotEditor.new(self,
430
+ 'Edit Plot',
431
+ @tabbed_plots_config.plot_types,
432
+ plot)
433
+ plot = plot_editor.execute
434
+ plot_editor.dispose
435
+ if plot
436
+ plot.gui_object.update(true)
437
+ @status_bar.showMessage(tr("Plot Edited"))
438
+ edited = true
439
+ @config_modified_callback.call() if @config_modified_callback
440
+ else
441
+ @status_bar.showMessage(tr("Plot Edit Canceled"))
442
+ end
443
+ end
444
+
445
+ return edited
446
+ end # def edit_plot
447
+
448
+ # Exports data objects on a plot - defaults to selected plot on the current tab
449
+ def export_plot(filename, progress, tab_index = nil, plot_index = nil)
450
+ Qt.execute_in_main_thread(true) do
451
+ # Select the current tab by default
452
+ tab_index = current_tab_index() unless tab_index
453
+
454
+ # Select selected plot by default
455
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
456
+ unless plot_index
457
+ Qt::MessageBox.information(self, 'Information', 'Please select a plot')
458
+ return
459
+ end
460
+ end
461
+
462
+ export_data_objects(filename, progress, tab_index, plot_index)
463
+ end # def export_plot
464
+
465
+ # Take screenshot of a plot on the current tab and write to filename - defaults to selected plot
466
+ def screenshot_plot(filename, plot_index = nil)
467
+ # Select the current tab by default
468
+ tab_index = current_tab_index() unless tab_index
469
+
470
+ # Select selected plot by default
471
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
472
+
473
+ # Take screenshot
474
+ Screenshot.screenshot_window(@tabbed_plots_config.tabs[tab_index].plots[plot_index].gui_object, filename) if plot_index
475
+ end # def screenshot_plot
476
+
477
+ # Reset all data objects on a plot - defaults to the selected plot on the current tab
478
+ def reset_plot(tab_index = nil, plot_index = nil)
479
+ # Select the current tab by default
480
+ tab_index = current_tab_index() unless tab_index
481
+
482
+ # Select selected plot by default
483
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
484
+
485
+ # Reset the data objects
486
+ reset_data_objects(tab_index, plot_index) if plot_index
487
+ end
488
+
489
+ # Returns the index of the selected plot or nil - looks at current tab by default
490
+ def selected_plot_index(tab_index = nil)
491
+ # Select the current tab by default
492
+ tab_index = current_tab_index() unless tab_index
493
+
494
+ plot_index = nil
495
+ if tab_index
496
+ Qt.execute_in_main_thread(true) do
497
+ @tabbed_plots_config.tabs[tab_index].plots.each_with_index do |plot, index|
498
+ if plot.gui_object.selected?
499
+ plot_index = index
500
+ break
501
+ end
502
+ end
503
+ end
504
+ end
505
+ return plot_index
506
+ end # def selected_plot_index
507
+
508
+ # Indicates if the plot has any data objects
509
+ def plot_has_data_objects?(tab_index = nil, plot_index = nil)
510
+ # Select the current tab by default
511
+ tab_index = current_tab_index() unless tab_index
512
+
513
+ # Select selected plot by default
514
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
515
+
516
+ return_value = false
517
+ if plot_index
518
+ @tabbed_plots_config.mu_synchronize do
519
+ return_value = true unless @tabbed_plots_config.tabs[tab_index].plots[plot_index].data_objects.empty?
520
+ end
521
+ end
522
+
523
+ return_value
524
+ end
525
+
526
+ ###############################################################################
527
+ # Data Object Related Methods
528
+ ###############################################################################
529
+
530
+ # Adds a data object to a plot - defaults to selected plot on the current tab
531
+ def add_data_object(tab_index = nil, plot_index = nil, data_object = nil)
532
+ # Select the current tab by default
533
+ tab_index = current_tab_index() unless tab_index
534
+
535
+ # Select selected plot by default
536
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
537
+ unless plot_index
538
+ Qt::MessageBox.information(self, 'Information', 'Please select a plot')
539
+ return false
540
+ end
541
+
542
+ # Get plot
543
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
544
+
545
+ # Start data object editor to create new data object
546
+ unless data_object
547
+ data_object_editor = TabbedPlotsDataObjectEditor.new(self,'Add Data Object', @tabbed_plots_config.plot_type_to_data_object_type_mapping[plot.plot_type])
548
+ data_object = data_object_editor.execute
549
+ data_object_editor.dispose
550
+ unless data_object
551
+ @status_bar.showMessage(tr("Add Data Object Canceled"))
552
+ return false
553
+ end
554
+ end
555
+
556
+ # Assign color to data object
557
+ data_object.color = get_free_color(@tabbed_plots_config.tabs[tab_index]) unless data_object.assigned_color
558
+
559
+ # Add to config
560
+ @tabbed_plots_config.add_data_object(tab_index, plot_index, data_object)
561
+ @tabbed_plots_config.update_max_points_saved(@points_saved.value)
562
+
563
+ # Update Plot
564
+ @tabbed_plots_config.tabs[tab_index].plots[plot_index].gui_object.update(true)
565
+
566
+ # Update data object list
567
+ fill_data_object_list_for_plot(@tabbed_plots_config.tabs[tab_index].plots[plot_index])
568
+
569
+ @status_bar.showMessage(tr("Add Data Object Succeeded"))
570
+ @config_modified_callback.call() if @config_modified_callback
571
+ return true
572
+ end # def add_data_object
573
+
574
+ # Deletes a data object from a plot - defaults to the selected data objects on the selected plot on the current tab
575
+ def delete_data_object(tab_index = nil, plot_index = nil, data_object_index = nil)
576
+ # Select the current tab by default
577
+ tab_index = current_tab_index() unless tab_index
578
+
579
+ # Select selected plot by default
580
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
581
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
582
+
583
+ data_object_indexes = get_data_object_indexes(plot,
584
+ tab_index,
585
+ plot_index,
586
+ data_object_index)
587
+ data_object_indexes.reverse_each do |data_object_idx|
588
+ @tabbed_plots_config.remove_data_object(tab_index, plot_index, data_object_idx)
589
+ end
590
+
591
+ if plot
592
+ plot.gui_object.update(true)
593
+ fill_data_object_list_for_plot(plot)
594
+ end
595
+ @config_modified_callback.call() if @config_modified_callback
596
+ end # def delete_data_object
597
+
598
+ # Edits a data object on a plot - defaults to the selected data objects on the selected plot on the current tab
599
+ def edit_data_object(tab_index = nil, plot_index = nil, data_object_index = nil)
600
+ edited = false
601
+
602
+ # Select the current tab by default
603
+ tab_index = current_tab_index() unless tab_index
604
+
605
+ # Select selected plot by default
606
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
607
+ if plot_index
608
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
609
+
610
+ data_object_indexes = get_data_object_indexes(plot,
611
+ tab_index,
612
+ plot_index,
613
+ data_object_index)
614
+ data_object_indexes.each do |data_object_idx|
615
+ data_object = @tabbed_plots_config.tabs[tab_index].plots[plot_index].data_objects[data_object_idx]
616
+ data_object_editor = TabbedPlotsDataObjectEditor.new(self, 'Edit Data Object', @tabbed_plots_config.plot_type_to_data_object_type_mapping[plot.plot_type], data_object)
617
+ data_object = data_object_editor.execute
618
+ data_object_editor.dispose
619
+ if data_object
620
+ @tabbed_plots_config.edit_data_object(tab_index, plot_index, data_object_idx, data_object)
621
+ @status_bar.showMessage(tr("Data Object(s) Edited"))
622
+ edited = true
623
+ @config_modified_callback.call() if @config_modified_callback
624
+ else
625
+ @status_bar.showMessage(tr("Edit Data Object Canceled"))
626
+ end
627
+ end
628
+
629
+ plot.gui_object.update(true)
630
+ fill_data_object_list_for_plot(plot)
631
+ end
632
+
633
+ return edited
634
+ end # def edit_data_object
635
+
636
+ # Duplicates a data object on a plot - defaults to the selected data objects on the selected plot on the current tab
637
+ def duplicate_data_object(tab_index = nil, plot_index = nil, data_object_index = nil)
638
+ # Select the current tab by default
639
+ tab_index = current_tab_index() unless tab_index
640
+
641
+ # Select selected plot by default
642
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
643
+ if plot_index
644
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
645
+
646
+ data_object_indexes = get_data_object_indexes(plot,
647
+ tab_index,
648
+ plot_index,
649
+ data_object_index)
650
+ data_object_indexes.each do |data_object_idx|
651
+ data_object = @tabbed_plots_config.duplicate_data_object(tab_index, plot_index, data_object_idx)
652
+ data_object.color = get_free_color(@tabbed_plots_config.tabs[tab_index]) unless data_object.assigned_color
653
+ end
654
+ @status_bar.showMessage(tr("Data Object(s) Duplicated"))
655
+
656
+ plot.gui_object.update(true)
657
+ fill_data_object_list_for_plot(@tabbed_plots_config.tabs[tab_index].plots[plot_index])
658
+ @config_modified_callback.call() if @config_modified_callback
659
+ end
660
+ end # def duplicate_data_object
661
+
662
+ # Exports a data object on a plot - defaults to the selected data objects on the selected plot on the current tab
663
+ def export_data_object(filename, progress, tab_index = nil, plot_index = nil, data_object_index = nil)
664
+ # Select the current tab by default
665
+ tab_index = current_tab_index() unless tab_index
666
+
667
+ # Select selected plot by default
668
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
669
+ if plot_index
670
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
671
+
672
+ data_object_indexes = get_data_object_indexes(plot,
673
+ tab_index,
674
+ plot_index,
675
+ data_object_index)
676
+
677
+ columns = []
678
+ data_object_indexes.each do |data_object_idx|
679
+ columns.concat(@tabbed_plots_config.export_data_objects(progress, tab_index, plot_index, data_object_idx))
680
+ end
681
+ write_export_file(filename, columns, progress)
682
+ end
683
+ end # def export_data_object
684
+
685
+ # Exports all data objects
686
+ def export_all_data_objects(filename, progress)
687
+ export_data_objects(filename, progress)
688
+ end # def export_all_data_objects
689
+
690
+ # Resets a data object on a plot - defaults to the selected data objects on the selected plot on the current tab
691
+ def reset_data_object(tab_index = nil, plot_index = nil, data_object_index = nil)
692
+ # Select the current tab by default
693
+ tab_index = current_tab_index() unless tab_index
694
+
695
+ # Select selected plot by default
696
+ plot_index = selected_plot_index(tab_index) if tab_index and not plot_index
697
+
698
+ if plot_index
699
+ data_object_indexes = selected_data_object_indexes()
700
+ data_object_indexes.reverse_each do |data_object_idx|
701
+ @tabbed_plots_config.reset_data_objects(tab_index, plot_index, data_object_idx)
702
+ end
703
+ redraw_plots(true, true)
704
+ @status_bar.showMessage(tr("Data Object(s) Reset"))
705
+ end
706
+ end
707
+
708
+ # Resets all data objects
709
+ def reset_all_data_objects
710
+ reset_data_objects()
711
+ end # def reset_all_data_objects
712
+
713
+ # Returns an array with the indexes of the selected data objects
714
+ def selected_data_object_indexes
715
+ selected = []
716
+ index = 0
717
+ Qt.execute_in_main_thread(true) do
718
+ @data_object_list.each do |list_item|
719
+ selected << index if list_item.selected? and @data_object_list.item(index).text != 'No Plot Selected'
720
+ index += 1
721
+ end
722
+ end
723
+ selected
724
+ end # def selected_data_object_indexes
725
+
726
+ # Redraws all plots that need to be redrawn
727
+ def redraw_plots(force_redraw = false, force_move_window = false)
728
+ if not @paused or force_redraw
729
+ overview_redraw_needed = force_redraw
730
+ move_window = force_move_window
731
+ points_plotted = @points_plotted.value
732
+
733
+ # Determine if overview redraws are needed
734
+ @tabbed_plots_config.mu_synchronize do
735
+ tab_index = @tab_book.currentIndex
736
+ return if tab_index < 0 or tab_index > (@tabbed_plots_config.tabs.length - 1)
737
+ @tabbed_plots_config.tabs[tab_index].plots.each do |plot|
738
+ if plot.redraw_needed
739
+ overview_redraw_needed = true
740
+ move_window = true unless @paused
741
+ break
742
+ end
743
+ end
744
+ end
745
+
746
+ # Redraw overview
747
+ overview_graph = @overview_graphs[@tab_book.currentIndex]
748
+ if overview_redraw_needed
749
+ num_lines = 0
750
+ @tabbed_plots_config.tabs[@tab_book.currentIndex].plots.each {|plot| num_lines += plot.data_objects.length}
751
+ if num_lines > 0
752
+ overview_points_plotted = points_plotted / num_lines
753
+ overview_points_plotted = MINIMUM_OVERVIEW_POINTS_PLOTTED if overview_points_plotted < MINIMUM_OVERVIEW_POINTS_PLOTTED
754
+ else
755
+ overview_points_plotted = points_plotted
756
+ end
757
+
758
+ overview_graph.clear_lines
759
+ @tabbed_plots_config.mu_synchronize do
760
+ @tabbed_plots_config.tabs[@tab_book.currentIndex].plots.each {|plot| plot.gui_object.update_overview(overview_points_plotted, overview_graph)}
761
+ end
762
+
763
+ overview_graph.graph(move_window)
764
+ end
765
+
766
+ # Sync other overview graph positions
767
+ @overview_graphs.each do |other_overview_graph|
768
+ if overview_graph != other_overview_graph
769
+ other_overview_graph.set_window_pos(overview_graph.window_min_x, overview_graph.window_max_x, false)
770
+ end
771
+ end
772
+
773
+ # Determine if plot redraws needed
774
+ gui_objects = []
775
+ redraw_needed = []
776
+ @tabbed_plots_config.mu_synchronize do
777
+ @tabbed_plots_config.tabs[@tab_book.currentIndex].plots.each do |plot|
778
+ gui_objects << plot.gui_object
779
+ if force_redraw or overview_redraw_needed
780
+ redraw_needed << true
781
+ else
782
+ redraw_needed << plot.redraw_needed
783
+ end
784
+ if redraw_needed[-1]
785
+ plot.gui_object.update_plot(points_plotted, overview_graph.window_min_x, overview_graph.window_max_x)
786
+ end
787
+ end
788
+ end
789
+
790
+ # Redraw plots
791
+ gui_objects.length.times do |index|
792
+ if redraw_needed[index]
793
+ gui_objects[index].redraw
794
+ end
795
+ end
796
+
797
+ end
798
+ end # def redraw_plots
799
+
800
+ protected
801
+
802
+ def get_data_object_indexes(plot, tab_index, plot_index, data_object_index)
803
+ if data_object_index
804
+ return unless (plot and @tabbed_plots_config.tabs[tab_index].plots[plot_index].data_objects[data_object_index])
805
+ data_object_indexes = [data_object_index]
806
+ else
807
+ data_object_indexes = selected_data_object_indexes()
808
+ end
809
+ end
810
+
811
+ # Resets data objects and redraws the plots
812
+ def reset_data_objects(tab_index = nil, plot_index = nil, data_object_index = nil)
813
+ @tabbed_plots_config.reset_data_objects(tab_index, plot_index, data_object_index)
814
+ redraw_plots(true, true)
815
+ end # def reset_data_objects
816
+
817
+ def write_export_file(filename, columns, progress)
818
+ max_column_size = 0
819
+ columns.each {|column| max_column_size = column.length if column.length > max_column_size}
820
+ File.open(filename, 'w') do |file|
821
+ max_column_size.times do |index|
822
+ string = ''
823
+ columns.each {|column| string << column[index].to_s << "\t"}
824
+ file.puts(string)
825
+ progress.set_overall_progress(index.to_f / max_column_size)
826
+ end
827
+ end
828
+ end
829
+
830
+ # Exports data objects to a file
831
+ def export_data_objects(filename, progress, tab_index = nil, plot_index = nil, data_object_index = nil)
832
+ columns = @tabbed_plots_config.export_data_objects(progress, tab_index, plot_index, data_object_index)
833
+ write_export_file(filename, columns, progress)
834
+ end # def export_data_objects
835
+
836
+ # Create GUI objects
837
+ def create
838
+ # Select first plot on each tab in reverse order
839
+ @tabbed_plots_config.tabs.reverse_each {|tab| select_plot(tab.plots[0]) if tab.plots[0]}
840
+
841
+ # Setup timeout to redraw graphs
842
+ @timeout = Qt::Timer.new(self)
843
+ @timeout.connect(SIGNAL('timeout()')) { redraw_plots() }
844
+ @timeout.method_missing(:start, @refresh_rate_ms)
845
+ end # def create
846
+
847
+ # Clears the data object list
848
+ def clear_data_object_list
849
+ # Clear data object list
850
+ @data_object_list.clearItems
851
+ @data_object_list.addItemColor('No Plot Selected')
852
+ end # def clear_data_object_list
853
+
854
+ # Fills the data object list for the specified plot
855
+ def fill_data_object_list_for_plot(plot)
856
+ # List Data Objects for this plot
857
+ @data_object_list.clearItems
858
+ plot.data_objects.each do |data_object|
859
+ @data_object_list.addItemColor(data_object.name, data_object.color)
860
+ end
861
+ end # def fill_data_object_list_for_plot
862
+
863
+ # Gets an available color on a tab - if no colors are available a random color
864
+ # is returned
865
+ def get_free_color(tab)
866
+ color = nil
867
+ colors = []
868
+ default_colors = DataObject::COLOR_LIST.clone
869
+ tab.plots.each do |plot|
870
+ plot.data_objects.each {|data_object| colors << data_object.color}
871
+ end
872
+ color = default_colors.shift
873
+ while (color and colors.include?(color))
874
+ color = default_colors.shift
875
+ end
876
+ color = get_random_color() unless color
877
+ color
878
+ end # def get_free_color
879
+
880
+ # Gets a random color
881
+ def get_random_color
882
+ random_index = (rand() * DataObject::COLOR_LIST.length).floor
883
+ random_index = (DataObject::COLOR_LIST.length - 1) if random_index >= DataObject::COLOR_LIST.length
884
+ DataObject::COLOR_LIST[random_index].clone
885
+ end # def get_random_color
886
+
887
+ # Builds the left frame of the tool
888
+ def build_left_frame
889
+ @tabbed_plots_left_frame = Qt::VBoxLayout.new
890
+ @left_frame.addLayout(@tabbed_plots_left_frame)
891
+
892
+ @seconds_plotted = FloatChooser.new(self,
893
+ 'Seconds Plotted:',
894
+ @tabbed_plots_config.seconds_plotted,
895
+ 0.0,
896
+ nil,
897
+ 15)
898
+ @seconds_plotted.sel_command_callback = method(:handle_seconds_plotted_change)
899
+ @tabbed_plots_left_frame.addWidget(@seconds_plotted)
900
+
901
+ @points_saved = IntegerChooser.new(self,
902
+ 'Points Saved:',
903
+ @tabbed_plots_config.points_saved,
904
+ 1,
905
+ nil,
906
+ 15)
907
+ @points_saved.sel_command_callback = method(:handle_points_saved_change)
908
+ @tabbed_plots_left_frame.addWidget(@points_saved)
909
+
910
+ @points_plotted = IntegerChooser.new(self,
911
+ 'Points Plotted:',
912
+ @tabbed_plots_config.points_plotted,
913
+ 2,
914
+ nil,
915
+ 15)
916
+ @points_plotted.sel_command_callback = method(:handle_points_plotted_change)
917
+ @tabbed_plots_left_frame.addWidget(@points_plotted)
918
+
919
+ @refresh_rate_hz = FloatChooser.new(self,
920
+ 'Refresh Rate Hz:',
921
+ @tabbed_plots_config.refresh_rate_hz,
922
+ 0.000001,
923
+ 1000.0,
924
+ 15)
925
+ @refresh_rate_hz.sel_command_callback = method(:handle_refresh_rate_hz_change)
926
+ @tabbed_plots_left_frame.addWidget(@refresh_rate_hz)
927
+
928
+ # Update overview graphs
929
+ @overview_graphs.each {|overview_graph| overview_graph.window_size = @tabbed_plots_config.seconds_plotted}
930
+
931
+ # Adders
932
+ add_adders(@tabbed_plots_left_frame) if @adder_orientation == Qt::Vertical
933
+
934
+ # Separator before list
935
+ sep = Qt::Frame.new
936
+ sep.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
937
+ @tabbed_plots_left_frame.addWidget(sep)
938
+
939
+ # Data Object List
940
+ @tabbed_plots_left_frame.addWidget(Qt::Label.new('Data Objects:'))
941
+ @data_object_list = Qt::ColorListWidget.new(self, false)
942
+ @data_object_list.setSelectionMode(Qt::AbstractItemView::ExtendedSelection)
943
+ @data_object_list.setContextMenuPolicy(Qt::CustomContextMenu)
944
+ @data_object_list.setDragDropMode(Qt::AbstractItemView::InternalMove)
945
+ @data_object_list.define_singleton_method(:keyPressEvent) do |event|
946
+ case event.key
947
+ when Qt::Key_Delete, Qt::Key_Backspace
948
+ otp = self.original_parent
949
+ unless otp.selected_data_object_indexes.empty?
950
+ paused = otp.paused?()
951
+ otp.pause()
952
+ result = Qt::MessageBox.warning(self,
953
+ 'Warning!',
954
+ "Are you sure you want to delete the selected data objects?",
955
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::No)
956
+ if result == Qt::MessageBox::No
957
+ otp.status_bar.showMessage(tr("Data Object Deletion Canceled"))
958
+ else
959
+ otp.status_bar.showMessage(tr("Data Object Deleted"))
960
+ otp.delete_data_object()
961
+ end
962
+ otp.resume() unless paused
963
+ end
964
+ end
965
+ super(event)
966
+ end
967
+ connect(@data_object_list.model,
968
+ SIGNAL('rowsMoved(const QModelIndex&, int, int, const QModelIndex&, int)'),
969
+ self,
970
+ SLOT('data_object_moved(const QModelIndex&, int, int, const QModelIndex&, int)'))
971
+ connect(@data_object_list,
972
+ SIGNAL('customContextMenuRequested(const QPoint&)'),
973
+ self,
974
+ SLOT('data_object_context_menu(const QPoint&)'))
975
+ @data_object_list.connect(SIGNAL('itemClicked(QListWidgetItem*)')) do
976
+ @status_bar.showMessage(tr("Drag and drop to reorder. Items are drawn in order from top to bottom."))
977
+ end
978
+ @data_object_list.addItemColor('No Plot Selected')
979
+ @tabbed_plots_left_frame.addWidget(@data_object_list)
980
+ @tabbed_plots_config.update_max_points_saved(@points_saved.value)
981
+ end # def build_left_frame
982
+
983
+ # Handler for points saved changing
984
+ def handle_points_saved_change(value_string, value_integer)
985
+ if value_integer < @tabbed_plots_config.points_saved
986
+ paused = paused?()
987
+ pause()
988
+ result = Qt::MessageBox.warning(self,
989
+ 'Warning!',
990
+ "Reducing Points Saved May Discard Data! Discard?",
991
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::No)
992
+ resume() unless paused
993
+ if result == Qt::MessageBox::No
994
+ @points_saved.value = @tabbed_plots_config.points_saved
995
+ return
996
+ end
997
+ end
998
+
999
+ @tabbed_plots_config.points_saved = value_integer
1000
+ @tabbed_plots_config.update_max_points_saved(value_integer)
1001
+
1002
+ redraw_plots(true)
1003
+ @config_modified_callback.call() if @config_modified_callback
1004
+ end # def handle_points_saved_change
1005
+
1006
+ # Handler for seconds plotted changing
1007
+ def handle_seconds_plotted_change(value_string, value_float)
1008
+ @overview_graphs.each {|overview_graph| overview_graph.window_size = value_float}
1009
+ @tabbed_plots_config.seconds_plotted = value_float
1010
+ @config_modified_callback.call() if @config_modified_callback
1011
+ end # def handle_seconds_plotted_change
1012
+
1013
+ # Handler for points plotted changing
1014
+ def handle_points_plotted_change(value_string, value_integer)
1015
+ redraw_plots(true)
1016
+ @tabbed_plots_config.points_plotted = value_integer
1017
+ @config_modified_callback.call() if @config_modified_callback
1018
+ end # def handle_points_plotted_change
1019
+
1020
+ # Handler for refresh rate hz changing
1021
+ def handle_refresh_rate_hz_change(value_string, value_float)
1022
+ redraw_plots(true)
1023
+ @tabbed_plots_config.refresh_rate_hz = value_float
1024
+ @refresh_rate_ms = (1000.0 / value_float).round
1025
+
1026
+ @timeout.method_missing(:stop)
1027
+ @timeout.method_missing(:start, @refresh_rate_ms)
1028
+ @config_modified_callback.call() if @config_modified_callback
1029
+ end # def handle_points_plotted_change
1030
+
1031
+ # Adds the adders
1032
+ def add_adders(layout)
1033
+ # Data Object Adders
1034
+ @data_object_adders = []
1035
+
1036
+ if @adder_types
1037
+ type_list = @adder_types
1038
+ else
1039
+ type_list = @tabbed_plots_config.data_object_types
1040
+ end
1041
+
1042
+ type_list.each do |data_object_type|
1043
+ begin
1044
+ filename = data_object_type.to_s.downcase + '_data_object_adder.rb'
1045
+ @data_object_adders << Cosmos.require_class(filename).new(self, @adder_orientation)
1046
+ layout.addWidget(@data_object_adders[-1])
1047
+ @data_object_adders[-1].add_data_object_callback = method(:adder_add_data_object)
1048
+ @data_object_adders[-1].update
1049
+ rescue Exception
1050
+ # No adder for this type
1051
+ end
1052
+ end
1053
+ end # def add_adders
1054
+
1055
+ # Method called by adders to add a data object
1056
+ def adder_add_data_object(data_object)
1057
+ tab_index = current_tab_index()
1058
+ plot_index = selected_plot_index(tab_index)
1059
+ if plot_index
1060
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
1061
+ mapping = @tabbed_plots_config.plot_type_to_data_object_type_mapping[plot.plot_type]
1062
+ if mapping.include?(data_object.data_object_type)
1063
+ add_data_object(tab_index, plot_index, data_object)
1064
+ else
1065
+ paused = paused?()
1066
+ pause()
1067
+ Qt::MessageBox.critical(self, 'Error', "A #{data_object.data_object_type} data object cannot be added to a #{plot.plot_type} plot")
1068
+ resume() unless paused
1069
+ end
1070
+ else
1071
+ paused = paused?()
1072
+ pause()
1073
+ Qt::MessageBox.information(self, 'Information', 'Please select a plot')
1074
+ resume() unless paused
1075
+ end
1076
+ end # def adder_add_data_object
1077
+
1078
+ # Builds the GUI holding tabs and plots
1079
+ def build_right_frame
1080
+ # Frame around everything
1081
+ @tabbed_plots_right_frame = Qt::VBoxLayout.new
1082
+ @right_frame.addLayout(@tabbed_plots_right_frame)
1083
+
1084
+ # Adders
1085
+ add_adders(@tabbed_plots_right_frame) if @adder_orientation == Qt::Horizontal
1086
+
1087
+ # Tabbook to hold tabs
1088
+ @tab_book = Qt::TabWidget.new
1089
+ @tab_book.setContextMenuPolicy(Qt::CustomContextMenu)
1090
+ connect(@tab_book,
1091
+ SIGNAL('customContextMenuRequested(const QPoint&)'),
1092
+ self,
1093
+ SLOT('tab_context_menu(const QPoint&)'))
1094
+ @tabbed_plots_right_frame.addWidget(@tab_book)
1095
+
1096
+ # Array of overview graphs and graph times
1097
+ @overview_graphs = []
1098
+ @graph_time_start = []
1099
+ @graph_time_end = []
1100
+
1101
+ # Create each tab
1102
+ @tabbed_plots_config.mu_synchronize do
1103
+ @tabbed_plots_config.tabs.each_with_index do |tab, tab_index|
1104
+ # Maximize graph start and end times
1105
+ @graph_time_start << -1.0e300
1106
+ @graph_time_end << 1.0e300
1107
+
1108
+ # Create tab item for the tab
1109
+ tab_text = tab.tab_text
1110
+ tab_text = "Tab #{tab_index + 1}" unless tab_text
1111
+ tab_item = Qt::Widget.new
1112
+ tab_item.setContextMenuPolicy(Qt::CustomContextMenu)
1113
+ connect(tab_item, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('plot_context_menu(const QPoint&)'))
1114
+
1115
+ # Create overall vertical layout manager for tab.
1116
+ tab_layout = Qt::VBoxLayout.new()
1117
+ tab_item.setLayout(tab_layout)
1118
+ tab.gui_item = tab_item
1119
+ tab.gui_frame = tab_layout
1120
+ tab.tab_text = tab_text
1121
+
1122
+ # Create layout manager to hold plots based on number of plots
1123
+ layout = Qt::AdaptiveGridLayout.new
1124
+ tab.gui_layout = layout
1125
+
1126
+ # Add with stretch factor 1 to give it priority over everything else
1127
+ tab_layout.addLayout(layout, 1)
1128
+ # Add stretch in case they delete the last plot.
1129
+ # This will force the overview graph (which doesn't get deleted)
1130
+ # to stay at the bottom of the layout instead of moving
1131
+ tab_layout.addStretch()
1132
+
1133
+ @tab_book.addTab(tab_item, tab_text)
1134
+
1135
+ # Create gui object for each plot
1136
+ default_colors = DataObject::COLOR_LIST.clone
1137
+ tab.plots.each_with_index do |plot, index|
1138
+ filename = plot.plot_type.downcase + '_plot_gui_object.rb'
1139
+ gui_object = Cosmos.require_class(filename).new(tab_item, tab, plot, self)
1140
+ tab.gui_layout.addWidget(gui_object)
1141
+ plot.gui_object = gui_object
1142
+ if plot.gui_object.respond_to? :mouse_left_button_press_callback
1143
+ current_tab = tab
1144
+ plot.gui_object.mouse_left_button_press_callback = lambda do |calling_gui_object|
1145
+ current_tab.plots.each do |current_plot|
1146
+ if current_plot.gui_object == calling_gui_object
1147
+ select_plot(current_plot)
1148
+ else
1149
+ unselect_plot(current_plot)
1150
+ end
1151
+ end
1152
+ @overview_graphs[@tab_book.currentIndex].setFocus
1153
+ end
1154
+ end
1155
+
1156
+ # Configure colors
1157
+ colors = []
1158
+ plot.data_objects.each do |data_object|
1159
+ if data_object.assigned_color
1160
+ colors << data_object.assigned_color
1161
+ else
1162
+ color = default_colors.shift
1163
+ while (color and colors.include?(color))
1164
+ color = default_colors.shift
1165
+ end
1166
+ color = get_random_color() unless color
1167
+ colors << color
1168
+ data_object.color = color
1169
+ end
1170
+ end
1171
+ end # tab.plots.each
1172
+
1173
+ # Add an overview graph to the tab
1174
+ @overview_graphs << OverviewGraph.new(tab_item)
1175
+ @overview_graphs[-1].window_size = @tabbed_plots_config.seconds_plotted
1176
+ @overview_graphs[-1].callback = method(:overview_graph_callback)
1177
+ tab_layout.addWidget(@overview_graphs[-1])
1178
+ end # tabs.each
1179
+ end
1180
+ # Attach this handler last so it doesn't fire when we create our first tab
1181
+ connect(@tab_book,
1182
+ SIGNAL('currentChanged(int)'),
1183
+ self,
1184
+ SLOT('handle_tab_change(int)'))
1185
+ end # def build_right_frame
1186
+
1187
+ # Function called by the overview graph on changes
1188
+ def overview_graph_callback(modified_overview_graph)
1189
+ if modified_overview_graph.window_size > 0.01
1190
+ @seconds_plotted.value = sprintf("%0.2f", modified_overview_graph.window_size)
1191
+ else
1192
+ @seconds_plotted.value = modified_overview_graph.window_size
1193
+ end
1194
+ @overview_graphs.each do |overview_graph|
1195
+ if overview_graph != modified_overview_graph
1196
+ overview_graph.set_window_size(modified_overview_graph.window_size, false)
1197
+ overview_graph.set_window_pos(modified_overview_graph.window_min_x, modified_overview_graph.window_max_x, false)
1198
+ end
1199
+ end
1200
+ redraw_plots(true)
1201
+ # Intentially not have adjusting the view window in the overview graph
1202
+ # be considered a configuration change
1203
+ end # def overview_graph_callback
1204
+
1205
+ # Selects the specified plot
1206
+ def select_plot(plot)
1207
+ unless plot.gui_object.selected?
1208
+ plot.gui_object.select
1209
+ fill_data_object_list_for_plot(plot)
1210
+ end
1211
+ end # def select_plot
1212
+
1213
+ # Unselects the specified plot
1214
+ def unselect_plot(plot)
1215
+ plot.gui_object.unselect if plot.gui_object.selected?
1216
+ end # def unselect_plot
1217
+
1218
+ # Unselects all plots on a tab
1219
+ def unselect_all_plots(tab_index = nil)
1220
+ tab_index = @tab_book.current unless tab_index
1221
+ return if tab_index < 0 or @tabbed_plots_config.tabs[tab_index].nil?
1222
+ @tabbed_plots_config.tabs[tab_index].plots.each do |plot|
1223
+ unselect_plot(plot)
1224
+ end
1225
+ end # def unselect_all_plots
1226
+
1227
+ ############################################################################
1228
+ # Slot implementation
1229
+ ############################################################################
1230
+
1231
+ # Handles right clicks on a tab
1232
+ def tab_context_menu(point)
1233
+ index = 0
1234
+ (0..@tab_book.tabBar.count).each do |bar|
1235
+ index = bar
1236
+ break if @tab_book.tabBar.tabRect(bar).contains(point)
1237
+ end
1238
+ return if (index == @tab_book.tabBar.count)
1239
+ @tab_book.setCurrentIndex(index)
1240
+
1241
+ @tab_item_right_button_release_callback.call(@tab_book.mapToGlobal(point)) if @tab_item_right_button_release_callback
1242
+ end
1243
+
1244
+ # Handles right clicks on a plot
1245
+ def plot_context_menu(point)
1246
+ tab_index = @tab_book.currentIndex
1247
+ return if tab_index < 0 or @tabbed_plots_config.tabs[tab_index].nil?
1248
+ plot_point = nil
1249
+ @tabbed_plots_config.tabs[tab_index].plots.each do |plot|
1250
+ plot_point = @tab_book.widget(tab_index).mapToGlobal(point) if plot.gui_object.selected?
1251
+ end
1252
+
1253
+ @plot_right_button_release_callback.call(plot_point) if @plot_right_button_release_callback and plot_point
1254
+ end
1255
+
1256
+ # Handles a right click on a data object
1257
+ def data_object_context_menu(point)
1258
+ @data_object_right_button_release_callback.call(@data_object_list.mapToGlobal(point)) if @data_object_right_button_release_callback
1259
+ end
1260
+
1261
+ # Handles data objects being moved
1262
+ def data_object_moved(sourceParent, sourceStart, sourceEnd, destinationParent, destinationRow)
1263
+ start_index = sourceStart
1264
+ if sourceStart < destinationRow
1265
+ end_index = destinationRow - 1
1266
+ else
1267
+ end_index = destinationRow
1268
+ end
1269
+ tab_index = current_tab_index()
1270
+ plot_index = selected_plot_index(tab_index)
1271
+ @tabbed_plots_config.move_data_object(tab_index, plot_index, start_index, end_index)
1272
+ @config_modified_callback.call() if @config_modified_callback
1273
+ end
1274
+
1275
+ # Handles tab change events
1276
+ def handle_tab_change(tab_index)
1277
+ if @tab_book.count > 0
1278
+ plot_index = selected_plot_index(tab_index)
1279
+ if plot_index
1280
+ plot = @tabbed_plots_config.tabs[tab_index].plots[plot_index]
1281
+ fill_data_object_list_for_plot(plot)
1282
+ else
1283
+ clear_data_object_list()
1284
+ end
1285
+ redraw_plots(true)
1286
+ end
1287
+ end # def handle_tab_change
1288
+
1289
+ end # class OverviewTabbedPlots
1290
+
1291
+ end # module Cosmos