cosmos 4.0.3-java

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