roby 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. data/History.txt +7 -5
  2. data/Manifest.txt +91 -16
  3. data/README.txt +24 -24
  4. data/Rakefile +92 -64
  5. data/app/config/app.yml +42 -43
  6. data/app/config/init.rb +26 -0
  7. data/benchmark/alloc_misc.rb +123 -0
  8. data/benchmark/discovery_latency.rb +67 -0
  9. data/benchmark/garbage_collection.rb +48 -0
  10. data/benchmark/genom.rb +31 -0
  11. data/benchmark/transactions.rb +62 -0
  12. data/bin/roby +1 -1
  13. data/bin/roby-log +16 -6
  14. data/doc/guide/.gitignore +2 -0
  15. data/doc/guide/config.yaml +34 -0
  16. data/doc/guide/ext/init.rb +14 -0
  17. data/doc/guide/ext/previous_next.rb +40 -0
  18. data/doc/guide/ext/rdoc_links.rb +33 -0
  19. data/doc/guide/index.rdoc +16 -0
  20. data/doc/guide/overview.rdoc +62 -0
  21. data/doc/guide/plan_modifications.rdoc +67 -0
  22. data/doc/guide/src/abstraction/achieve_with.page +8 -0
  23. data/doc/guide/src/abstraction/forwarding.page +8 -0
  24. data/doc/guide/src/abstraction/hierarchy.page +19 -0
  25. data/doc/guide/src/abstraction/index.page +28 -0
  26. data/doc/guide/src/abstraction/task_models.page +13 -0
  27. data/doc/guide/src/basics.template +6 -0
  28. data/doc/guide/src/basics/app.page +139 -0
  29. data/doc/guide/src/basics/code_examples.page +33 -0
  30. data/doc/guide/src/basics/dry.page +69 -0
  31. data/doc/guide/src/basics/errors.page +443 -0
  32. data/doc/guide/src/basics/events.page +179 -0
  33. data/doc/guide/src/basics/hierarchy.page +275 -0
  34. data/doc/guide/src/basics/index.page +11 -0
  35. data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
  36. data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
  37. data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
  38. data/doc/guide/src/basics/log_replay/goForward_4.png +0 -0
  39. data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
  40. data/doc/guide/src/basics/log_replay/hierarchy_error_1.png +0 -0
  41. data/doc/guide/src/basics/log_replay/hierarchy_error_2.png +0 -0
  42. data/doc/guide/src/basics/log_replay/hierarchy_error_3.png +0 -0
  43. data/doc/guide/src/basics/log_replay/plan_repair_1.png +0 -0
  44. data/doc/guide/src/basics/log_replay/plan_repair_2.png +0 -0
  45. data/doc/guide/src/basics/log_replay/plan_repair_3.png +0 -0
  46. data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
  47. data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
  48. data/doc/guide/src/basics/log_replay/roby_log_relation_window.png +0 -0
  49. data/doc/guide/src/basics/log_replay/roby_replay_event_representation.png +0 -0
  50. data/doc/guide/src/basics/plan_objects.page +71 -0
  51. data/doc/guide/src/basics/relations_display.page +203 -0
  52. data/doc/guide/src/basics/roby_cycle_overview.png +0 -0
  53. data/doc/guide/src/basics/shell.page +102 -0
  54. data/doc/guide/src/basics/summary.page +32 -0
  55. data/doc/guide/src/basics/tasks.page +357 -0
  56. data/doc/guide/src/basics_shell_header.txt +16 -0
  57. data/doc/guide/src/cycle/cycle-overview.png +0 -0
  58. data/doc/guide/src/cycle/cycle-overview.svg +208 -0
  59. data/doc/guide/src/cycle/error_handling.page +168 -0
  60. data/doc/guide/src/cycle/error_instantaneous_repair.png +0 -0
  61. data/doc/guide/src/cycle/error_instantaneous_repair.svg +1224 -0
  62. data/doc/guide/src/cycle/garbage_collection.page +10 -0
  63. data/doc/guide/src/cycle/index.page +23 -0
  64. data/doc/guide/src/cycle/propagation.page +154 -0
  65. data/doc/guide/src/cycle/propagation_diamond.png +0 -0
  66. data/doc/guide/src/cycle/propagation_diamond.svg +1279 -0
  67. data/doc/guide/src/default.css +319 -0
  68. data/doc/guide/src/default.template +74 -0
  69. data/doc/guide/src/htmldoc.metainfo +20 -0
  70. data/doc/guide/src/htmldoc.virtual +18 -0
  71. data/doc/guide/src/images/bodybg.png +0 -0
  72. data/doc/guide/src/images/contbg.png +0 -0
  73. data/doc/guide/src/images/footerbg.png +0 -0
  74. data/doc/guide/src/images/gradient1.png +0 -0
  75. data/doc/guide/src/images/gradient2.png +0 -0
  76. data/doc/guide/src/index.page +7 -0
  77. data/doc/guide/src/introduction/index.page +29 -0
  78. data/doc/guide/src/introduction/install.page +133 -0
  79. data/doc/{papers.rdoc → guide/src/introduction/publications.page} +5 -2
  80. data/doc/{videos.rdoc → guide/src/introduction/videos.page} +4 -2
  81. data/doc/guide/src/plugins/fault_tolerance.page +44 -0
  82. data/doc/guide/src/plugins/index.page +11 -0
  83. data/doc/guide/src/plugins/subsystems.page +45 -0
  84. data/doc/guide/src/relations/dependency.page +89 -0
  85. data/doc/guide/src/relations/index.page +12 -0
  86. data/doc/misc/update_github +24 -0
  87. data/doc/tutorials/02-GoForward.rdoc +3 -3
  88. data/ext/graph/graph.cc +46 -0
  89. data/lib/roby.rb +57 -22
  90. data/lib/roby/app.rb +132 -112
  91. data/lib/roby/app/plugins/rake.rb +21 -0
  92. data/lib/roby/app/rake.rb +0 -7
  93. data/lib/roby/app/run.rb +1 -1
  94. data/lib/roby/app/scripts/distributed.rb +1 -2
  95. data/lib/roby/app/scripts/generate/bookmarks.rb +1 -1
  96. data/lib/roby/app/scripts/results.rb +2 -1
  97. data/lib/roby/app/scripts/run.rb +6 -2
  98. data/lib/roby/app/scripts/shell.rb +11 -11
  99. data/lib/roby/config.rb +1 -1
  100. data/lib/roby/decision_control.rb +62 -3
  101. data/lib/roby/distributed.rb +4 -0
  102. data/lib/roby/distributed/base.rb +8 -0
  103. data/lib/roby/distributed/communication.rb +12 -8
  104. data/lib/roby/distributed/connection_space.rb +61 -44
  105. data/lib/roby/distributed/distributed_object.rb +1 -1
  106. data/lib/roby/distributed/notifications.rb +22 -30
  107. data/lib/roby/distributed/peer.rb +13 -8
  108. data/lib/roby/distributed/proxy.rb +5 -5
  109. data/lib/roby/distributed/subscription.rb +4 -4
  110. data/lib/roby/distributed/transaction.rb +3 -3
  111. data/lib/roby/event.rb +176 -110
  112. data/lib/roby/exceptions.rb +12 -4
  113. data/lib/roby/execution_engine.rb +1604 -0
  114. data/lib/roby/external_process_task.rb +225 -0
  115. data/lib/roby/graph.rb +0 -6
  116. data/lib/roby/interface.rb +221 -137
  117. data/lib/roby/log/console.rb +5 -3
  118. data/lib/roby/log/data_stream.rb +94 -16
  119. data/lib/roby/log/dot.rb +8 -8
  120. data/lib/roby/log/event_stream.rb +13 -3
  121. data/lib/roby/log/file.rb +43 -18
  122. data/lib/roby/log/gui/basic_display_ui.rb +89 -0
  123. data/lib/roby/log/gui/chronicle_view_ui.rb +90 -0
  124. data/lib/roby/log/gui/data_displays.rb +4 -5
  125. data/lib/roby/log/gui/data_displays_ui.rb +146 -0
  126. data/lib/roby/log/gui/relations.rb +18 -18
  127. data/lib/roby/log/gui/relations_ui.rb +120 -0
  128. data/lib/roby/log/gui/relations_view_ui.rb +144 -0
  129. data/lib/roby/log/gui/replay.rb +41 -13
  130. data/lib/roby/log/gui/replay_controls.rb +3 -0
  131. data/lib/roby/log/gui/replay_controls.ui +133 -110
  132. data/lib/roby/log/gui/replay_controls_ui.rb +249 -0
  133. data/lib/roby/log/hooks.rb +19 -18
  134. data/lib/roby/log/logger.rb +7 -6
  135. data/lib/roby/log/notifications.rb +4 -4
  136. data/lib/roby/log/plan_rebuilder.rb +20 -22
  137. data/lib/roby/log/relations.rb +44 -16
  138. data/lib/roby/log/server.rb +1 -4
  139. data/lib/roby/log/timings.rb +88 -19
  140. data/lib/roby/plan-object.rb +135 -11
  141. data/lib/roby/plan.rb +408 -224
  142. data/lib/roby/planning/loops.rb +32 -25
  143. data/lib/roby/planning/model.rb +157 -51
  144. data/lib/roby/planning/task.rb +47 -20
  145. data/lib/roby/query.rb +128 -92
  146. data/lib/roby/relations.rb +254 -136
  147. data/lib/roby/relations/conflicts.rb +6 -9
  148. data/lib/roby/relations/dependency.rb +358 -0
  149. data/lib/roby/relations/ensured.rb +0 -1
  150. data/lib/roby/relations/error_handling.rb +0 -1
  151. data/lib/roby/relations/events.rb +0 -2
  152. data/lib/roby/relations/executed_by.rb +26 -11
  153. data/lib/roby/relations/planned_by.rb +14 -14
  154. data/lib/roby/robot.rb +46 -0
  155. data/lib/roby/schedulers/basic.rb +34 -0
  156. data/lib/roby/standalone.rb +4 -0
  157. data/lib/roby/standard_errors.rb +21 -15
  158. data/lib/roby/state/events.rb +5 -4
  159. data/lib/roby/support.rb +107 -6
  160. data/lib/roby/task-operations.rb +23 -19
  161. data/lib/roby/task.rb +522 -148
  162. data/lib/roby/task_index.rb +80 -0
  163. data/lib/roby/test/common.rb +283 -44
  164. data/lib/roby/test/distributed.rb +53 -37
  165. data/lib/roby/test/testcase.rb +9 -204
  166. data/lib/roby/test/tools.rb +3 -3
  167. data/lib/roby/transactions.rb +154 -111
  168. data/lib/roby/transactions/proxy.rb +40 -7
  169. data/manifest.xml +20 -0
  170. data/plugins/fault_injection/README.txt +0 -3
  171. data/plugins/fault_injection/Rakefile +2 -8
  172. data/plugins/fault_injection/app.rb +1 -1
  173. data/plugins/fault_injection/fault_injection.rb +3 -3
  174. data/plugins/fault_injection/test/test_fault_injection.rb +19 -25
  175. data/plugins/subsystems/README.txt +0 -3
  176. data/plugins/subsystems/Rakefile +2 -7
  177. data/plugins/subsystems/app.rb +27 -16
  178. data/plugins/subsystems/test/app/config/init.rb +3 -0
  179. data/plugins/subsystems/test/app/planners/main.rb +1 -1
  180. data/plugins/subsystems/test/app/tasks/services.rb +1 -1
  181. data/plugins/subsystems/test/test_subsystems.rb +23 -16
  182. data/test/distributed/test_communication.rb +32 -15
  183. data/test/distributed/test_connection.rb +28 -26
  184. data/test/distributed/test_execution.rb +59 -54
  185. data/test/distributed/test_mixed_plan.rb +34 -34
  186. data/test/distributed/test_plan_notifications.rb +26 -26
  187. data/test/distributed/test_protocol.rb +57 -48
  188. data/test/distributed/test_query.rb +11 -7
  189. data/test/distributed/test_remote_plan.rb +71 -71
  190. data/test/distributed/test_transaction.rb +50 -47
  191. data/test/mockups/external_process +28 -0
  192. data/test/planning/test_loops.rb +163 -119
  193. data/test/planning/test_model.rb +3 -3
  194. data/test/planning/test_task.rb +27 -7
  195. data/test/relations/test_conflicts.rb +3 -3
  196. data/test/relations/test_dependency.rb +324 -0
  197. data/test/relations/test_ensured.rb +2 -2
  198. data/test/relations/test_executed_by.rb +94 -19
  199. data/test/relations/test_planned_by.rb +11 -9
  200. data/test/suite_core.rb +6 -3
  201. data/test/suite_distributed.rb +1 -0
  202. data/test/suite_planning.rb +1 -0
  203. data/test/suite_relations.rb +2 -2
  204. data/test/tasks/test_external_process.rb +126 -0
  205. data/test/{test_thread_task.rb → tasks/test_thread_task.rb} +17 -20
  206. data/test/test_bgl.rb +21 -1
  207. data/test/test_event.rb +229 -155
  208. data/test/test_exceptions.rb +79 -80
  209. data/test/test_execution_engine.rb +987 -0
  210. data/test/test_gui.rb +1 -1
  211. data/test/test_interface.rb +11 -5
  212. data/test/test_log.rb +18 -7
  213. data/test/test_log_server.rb +1 -0
  214. data/test/test_plan.rb +229 -395
  215. data/test/test_query.rb +193 -35
  216. data/test/test_relations.rb +88 -8
  217. data/test/test_state.rb +55 -37
  218. data/test/test_support.rb +1 -1
  219. data/test/test_task.rb +371 -218
  220. data/test/test_testcase.rb +32 -16
  221. data/test/test_transactions.rb +211 -170
  222. data/test/test_transactions_proxy.rb +37 -19
  223. metadata +169 -71
  224. data/.gitignore +0 -29
  225. data/doc/styles/allison.css +0 -314
  226. data/doc/styles/allison.js +0 -316
  227. data/doc/styles/allison.rb +0 -276
  228. data/doc/styles/jamis.rb +0 -593
  229. data/lib/roby/control.rb +0 -746
  230. data/lib/roby/executives/simple.rb +0 -30
  231. data/lib/roby/propagation.rb +0 -562
  232. data/lib/roby/relations/hierarchy.rb +0 -239
  233. data/lib/roby/transactions/updates.rb +0 -139
  234. data/test/relations/test_hierarchy.rb +0 -158
  235. data/test/test_control.rb +0 -399
  236. data/test/test_propagation.rb +0 -210
@@ -0,0 +1,249 @@
1
+ =begin
2
+ ** Form generated from reading ui file 'replay_controls.ui'
3
+ **
4
+ ** Created: Mon Jan 25 15:21:37 2010
5
+ ** by: Qt User Interface Compiler version 4.5.3
6
+ **
7
+ ** WARNING! All changes made in this file will be lost when recompiling ui file!
8
+ =end
9
+
10
+ class Ui_ReplayControls
11
+ attr_reader :actionBookmarksAdd
12
+ attr_reader :actionGoto
13
+ attr_reader :actionBookmarksSave
14
+ attr_reader :actionBookmarksSaveAs
15
+ attr_reader :actionBookmarksLoad
16
+ attr_reader :actionBookmarksSetMark
17
+ attr_reader :vboxLayout
18
+ attr_reader :grp_play
19
+ attr_reader :verticalLayout
20
+ attr_reader :horizontalLayout
21
+ attr_reader :progress
22
+ attr_reader :goto
23
+ attr_reader :time_lcd
24
+ attr_reader :hboxLayout
25
+ attr_reader :textLabel1
26
+ attr_reader :speed
27
+ attr_reader :slower
28
+ attr_reader :play
29
+ attr_reader :faster
30
+ attr_reader :horizontalLayout_2
31
+ attr_reader :bookmarks
32
+ attr_reader :spacerItem
33
+ attr_reader :gridLayout
34
+ attr_reader :seek_start
35
+ attr_reader :play_step
36
+ attr_reader :play_next_nonempty
37
+
38
+ def setupUi(replayControls)
39
+ if replayControls.objectName.nil?
40
+ replayControls.objectName = "replayControls"
41
+ end
42
+ replayControls.resize(442, 167)
43
+ @actionBookmarksAdd = Qt::Action.new(replayControls)
44
+ @actionBookmarksAdd.objectName = "actionBookmarksAdd"
45
+ @actionGoto = Qt::Action.new(replayControls)
46
+ @actionGoto.objectName = "actionGoto"
47
+ @actionGoto.shortcutContext = Qt::ApplicationShortcut
48
+ @actionBookmarksSave = Qt::Action.new(replayControls)
49
+ @actionBookmarksSave.objectName = "actionBookmarksSave"
50
+ @actionBookmarksSave.enabled = false
51
+ @actionBookmarksSaveAs = Qt::Action.new(replayControls)
52
+ @actionBookmarksSaveAs.objectName = "actionBookmarksSaveAs"
53
+ @actionBookmarksSaveAs.enabled = true
54
+ @actionBookmarksLoad = Qt::Action.new(replayControls)
55
+ @actionBookmarksLoad.objectName = "actionBookmarksLoad"
56
+ @actionBookmarksSetMark = Qt::Action.new(replayControls)
57
+ @actionBookmarksSetMark.objectName = "actionBookmarksSetMark"
58
+ @vboxLayout = Qt::VBoxLayout.new(replayControls)
59
+ @vboxLayout.objectName = "vboxLayout"
60
+ @grp_play = Qt::GroupBox.new(replayControls)
61
+ @grp_play.objectName = "grp_play"
62
+ @verticalLayout = Qt::VBoxLayout.new(@grp_play)
63
+ @verticalLayout.objectName = "verticalLayout"
64
+ @horizontalLayout = Qt::HBoxLayout.new()
65
+ @horizontalLayout.objectName = "horizontalLayout"
66
+ @progress = Qt::ProgressBar.new(@grp_play)
67
+ @progress.objectName = "progress"
68
+ @progress.value = 0
69
+ @progress.orientation = Qt::Horizontal
70
+
71
+ @horizontalLayout.addWidget(@progress)
72
+
73
+ @goto = Qt::PushButton.new(@grp_play)
74
+ @goto.objectName = "goto"
75
+
76
+ @horizontalLayout.addWidget(@goto)
77
+
78
+ @time_lcd = Qt::LCDNumber.new(@grp_play)
79
+ @time_lcd.objectName = "time_lcd"
80
+ @time_lcd.numDigits = 6
81
+ @time_lcd.segmentStyle = Qt::LCDNumber::Flat
82
+ @time_lcd.setProperty("value", Qt::Variant.new(0))
83
+
84
+ @horizontalLayout.addWidget(@time_lcd)
85
+
86
+
87
+ @verticalLayout.addLayout(@horizontalLayout)
88
+
89
+ @hboxLayout = Qt::HBoxLayout.new()
90
+ @hboxLayout.objectName = "hboxLayout"
91
+ @textLabel1 = Qt::Label.new(@grp_play)
92
+ @textLabel1.objectName = "textLabel1"
93
+ @textLabel1.wordWrap = false
94
+
95
+ @hboxLayout.addWidget(@textLabel1)
96
+
97
+ @speed = Qt::LineEdit.new(@grp_play)
98
+ @speed.objectName = "speed"
99
+ @sizePolicy = Qt::SizePolicy.new(Qt::SizePolicy::Minimum, Qt::SizePolicy::Fixed)
100
+ @sizePolicy.setHorizontalStretch(1)
101
+ @sizePolicy.setVerticalStretch(0)
102
+ @sizePolicy.heightForWidth = @speed.sizePolicy.hasHeightForWidth
103
+ @speed.sizePolicy = @sizePolicy
104
+ @speed.maximumSize = Qt::Size.new(80, 32767)
105
+ @speed.alignment = Qt::AlignRight
106
+
107
+ @hboxLayout.addWidget(@speed)
108
+
109
+ @slower = Qt::PushButton.new(@grp_play)
110
+ @slower.objectName = "slower"
111
+
112
+ @hboxLayout.addWidget(@slower)
113
+
114
+ @play = Qt::PushButton.new(@grp_play)
115
+ @play.objectName = "play"
116
+ @sizePolicy1 = Qt::SizePolicy.new(Qt::SizePolicy::MinimumExpanding, Qt::SizePolicy::Fixed)
117
+ @sizePolicy1.setHorizontalStretch(2)
118
+ @sizePolicy1.setVerticalStretch(0)
119
+ @sizePolicy1.heightForWidth = @play.sizePolicy.hasHeightForWidth
120
+ @play.sizePolicy = @sizePolicy1
121
+ @play.checkable = true
122
+
123
+ @hboxLayout.addWidget(@play)
124
+
125
+ @faster = Qt::PushButton.new(@grp_play)
126
+ @faster.objectName = "faster"
127
+
128
+ @hboxLayout.addWidget(@faster)
129
+
130
+
131
+ @verticalLayout.addLayout(@hboxLayout)
132
+
133
+ @horizontalLayout_2 = Qt::HBoxLayout.new()
134
+ @horizontalLayout_2.objectName = "horizontalLayout_2"
135
+ @bookmarks = Qt::ToolButton.new(@grp_play)
136
+ @bookmarks.objectName = "bookmarks"
137
+ @bookmarks.popupMode = Qt::ToolButton::InstantPopup
138
+ @bookmarks.toolButtonStyle = Qt::ToolButtonTextBesideIcon
139
+ @bookmarks.arrowType = Qt::DownArrow
140
+
141
+ @horizontalLayout_2.addWidget(@bookmarks)
142
+
143
+ @spacerItem = Qt::SpacerItem.new(101, 20, Qt::SizePolicy::Expanding, Qt::SizePolicy::Minimum)
144
+
145
+ @horizontalLayout_2.addItem(@spacerItem)
146
+
147
+ @gridLayout = Qt::GridLayout.new()
148
+ @gridLayout.objectName = "gridLayout"
149
+ @seek_start = Qt::PushButton.new(@grp_play)
150
+ @seek_start.objectName = "seek_start"
151
+
152
+ @gridLayout.addWidget(@seek_start, 0, 0, 1, 1)
153
+
154
+ @play_step = Qt::PushButton.new(@grp_play)
155
+ @play_step.objectName = "play_step"
156
+
157
+ @gridLayout.addWidget(@play_step, 0, 1, 1, 1)
158
+
159
+ @play_next_nonempty = Qt::PushButton.new(@grp_play)
160
+ @play_next_nonempty.objectName = "play_next_nonempty"
161
+
162
+ @gridLayout.addWidget(@play_next_nonempty, 1, 0, 1, 2)
163
+
164
+
165
+ @horizontalLayout_2.addLayout(@gridLayout)
166
+
167
+
168
+ @verticalLayout.addLayout(@horizontalLayout_2)
169
+
170
+ play_next_nonempty.raise()
171
+ faster.raise()
172
+
173
+ @vboxLayout.addWidget(@grp_play)
174
+
175
+
176
+ retranslateUi(replayControls)
177
+
178
+ Qt::MetaObject.connectSlotsByName(replayControls)
179
+ end # setupUi
180
+
181
+ def setup_ui(replayControls)
182
+ setupUi(replayControls)
183
+ end
184
+
185
+ def retranslateUi(replayControls)
186
+ replayControls.windowTitle = Qt::Application.translate("ReplayControls", "Form", nil, Qt::Application::UnicodeUTF8)
187
+ @actionBookmarksAdd.text = Qt::Application.translate("ReplayControls", "Add...", nil, Qt::Application::UnicodeUTF8)
188
+ @actionGoto.text = Qt::Application.translate("ReplayControls", "goto", nil, Qt::Application::UnicodeUTF8)
189
+ @actionGoto.shortcut = Qt::Application.translate("ReplayControls", "Shift+G, G", nil, Qt::Application::UnicodeUTF8)
190
+ @actionBookmarksSave.text = Qt::Application.translate("ReplayControls", "Save", nil, Qt::Application::UnicodeUTF8)
191
+ @actionBookmarksSaveAs.text = Qt::Application.translate("ReplayControls", "Save As", nil, Qt::Application::UnicodeUTF8)
192
+ @actionBookmarksLoad.text = Qt::Application.translate("ReplayControls", "Load", nil, Qt::Application::UnicodeUTF8)
193
+ @actionBookmarksSetMark.text = Qt::Application.translate("ReplayControls", "Set mark", nil, Qt::Application::UnicodeUTF8)
194
+ @grp_play.title = Qt::Application.translate("ReplayControls", "Play", nil, Qt::Application::UnicodeUTF8)
195
+ @goto.text = Qt::Application.translate("ReplayControls", "&Goto", nil, Qt::Application::UnicodeUTF8)
196
+ @textLabel1.text = Qt::Application.translate("ReplayControls", "Speed", nil, Qt::Application::UnicodeUTF8)
197
+ @speed.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
198
+ "p, li { white-space: pre-wrap; }\n" \
199
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
200
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:600;\">Current playing speed</span></p>\n" \
201
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;\"><span style=\" font-weight:400;\">it is the factor between the time in the log file and the time of replay. For instance, 2 means that we replay twice as fast as in reality.</span></p>\n" \
202
+ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", nil, Qt::Application::UnicodeUTF8)
203
+ @speed.text = Qt::Application.translate("ReplayControls", "1", nil, Qt::Application::UnicodeUTF8)
204
+ @slower.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
205
+ "p, li { white-space: pre-wrap; }\n" \
206
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
207
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Decrease speed</p></body></html>", nil, Qt::Application::UnicodeUTF8)
208
+ @slower.text = Qt::Application.translate("ReplayControls", "Slower", nil, Qt::Application::UnicodeUTF8)
209
+ @play.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
210
+ "p, li { white-space: pre-wrap; }\n" \
211
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
212
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Play</p></body></html>", nil, Qt::Application::UnicodeUTF8)
213
+ @play.text = Qt::Application.translate("ReplayControls", "Play", nil, Qt::Application::UnicodeUTF8)
214
+ @faster.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
215
+ "p, li { white-space: pre-wrap; }\n" \
216
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
217
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Increase speed</p></body></html>", nil, Qt::Application::UnicodeUTF8)
218
+ @faster.text = Qt::Application.translate("ReplayControls", "Faster", nil, Qt::Application::UnicodeUTF8)
219
+ @bookmarks.text = Qt::Application.translate("ReplayControls", "Bookmarks", nil, Qt::Application::UnicodeUTF8)
220
+ @seek_start.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
221
+ "p, li { white-space: pre-wrap; }\n" \
222
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
223
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Go to start</p></body></html>", nil, Qt::Application::UnicodeUTF8)
224
+ @seek_start.text = Qt::Application.translate("ReplayControls", "Go To Beginning", nil, Qt::Application::UnicodeUTF8)
225
+ @seek_start.shortcut = ''
226
+ @play_step.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
227
+ "p, li { white-space: pre-wrap; }\n" \
228
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
229
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Go forward one step</p></body></html>", nil, Qt::Application::UnicodeUTF8)
230
+ @play_step.text = Qt::Application.translate("ReplayControls", "Step", nil, Qt::Application::UnicodeUTF8)
231
+ @play_next_nonempty.toolTip = Qt::Application.translate("ReplayControls", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" \
232
+ "p, li { white-space: pre-wrap; }\n" \
233
+ "</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n" \
234
+ "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Go to start</p></body></html>", nil, Qt::Application::UnicodeUTF8)
235
+ @play_next_nonempty.text = Qt::Application.translate("ReplayControls", "Play next non-empty cycle", nil, Qt::Application::UnicodeUTF8)
236
+ @play_next_nonempty.shortcut = ''
237
+ end # retranslateUi
238
+
239
+ def retranslate_ui(replayControls)
240
+ retranslateUi(replayControls)
241
+ end
242
+
243
+ end
244
+
245
+ module Ui
246
+ class ReplayControls < Ui_ReplayControls
247
+ end
248
+ end # module Ui
249
+
@@ -33,30 +33,31 @@ module Roby::Log
33
33
  Roby::Task.include TaskHooks
34
34
 
35
35
  module PlanHooks
36
- HOOKS = %w{inserted_tasks discarded_tasks replaced_tasks
37
- discovered_tasks discovered_events
38
- garbage_task finalized_task finalized_event
39
- added_transaction removed_transaction}
36
+ HOOKS = %w{
37
+ added_mission unmarked_mission
38
+ added_permanent unmarked_permanent
39
+ added_tasks added_events finalized_task finalized_event
40
+ replaced_tasks garbage_task added_transaction removed_transaction}
40
41
 
41
- def inserted(tasks)
42
+ def added_mission(tasks)
42
43
  super if defined? super
43
- Roby::Log.log(:inserted_tasks) { [self, tasks] }
44
+ Roby::Log.log(:added_mission) { [self, tasks] }
44
45
  end
45
- def discarded(tasks)
46
+ def unmarked_mission(tasks)
46
47
  super if defined? super
47
- Roby::Log.log(:discarded_tasks) { [self, tasks] }
48
+ Roby::Log.log(:unmarked_mission) { [self, tasks] }
48
49
  end
49
50
  def replaced(from, to)
50
51
  super if defined? super
51
52
  Roby::Log.log(:replaced_tasks) { [self, from, to] }
52
53
  end
53
- def discovered_events(tasks)
54
+ def added_events(tasks)
54
55
  super if defined? super
55
- Roby::Log.log(:discovered_events) { [self, tasks] }
56
+ Roby::Log.log(:added_events) { [self, tasks] }
56
57
  end
57
- def discovered_tasks(tasks)
58
+ def added_tasks(tasks)
58
59
  super if defined? super
59
- Roby::Log.log(:discovered_tasks) { [self, tasks] }
60
+ Roby::Log.log(:added_tasks) { [self, tasks] }
60
61
  end
61
62
  def garbage(task)
62
63
  super if defined? super
@@ -114,7 +115,7 @@ module Roby::Log
114
115
 
115
116
  def calling(context)
116
117
  super if defined? super
117
- Roby::Log.log(:generator_calling) { [self, Roby::Propagation.source_generators, context.to_s] }
118
+ Roby::Log.log(:generator_calling) { [self, plan.engine.propagation_source_generators, context.to_s] }
118
119
  end
119
120
 
120
121
  def called(context)
@@ -134,7 +135,7 @@ module Roby::Log
134
135
 
135
136
  def emitting(context)
136
137
  super if defined? super
137
- Roby::Log.log(:generator_emitting) { [self, Roby::Propagation.source_generators, context.to_s] }
138
+ Roby::Log.log(:generator_emitting) { [self, plan.engine.propagation_source_generators, context.to_s] }
138
139
  end
139
140
 
140
141
  def forwarding(event, to)
@@ -149,7 +150,7 @@ module Roby::Log
149
150
  end
150
151
  Roby::EventGenerator.include EventGeneratorHooks
151
152
 
152
- module ControlHooks
153
+ module ExecutionHooks
153
154
  HOOKS = %w{cycle_end}
154
155
 
155
156
  def cycle_end(timings)
@@ -170,12 +171,12 @@ module Roby::Log
170
171
  end
171
172
  end
172
173
  end
173
- Roby::Control.include ControlHooks
174
+ Roby::ExecutionEngine.include ExecutionHooks
174
175
 
175
176
  def self.each_hook
176
177
  [TransactionHooks, BasicObjectHooks, TaskHooks,
177
- PlanHooks, EventGeneratorHooks, ControlHooks,
178
- ControlHooks::ClassExtension].each do |klass|
178
+ PlanHooks, EventGeneratorHooks, ExecutionHooks,
179
+ ExecutionHooks::ClassExtension].each do |klass|
179
180
  klass::HOOKS.each do |m|
180
181
  yield(klass, m.to_sym)
181
182
  end
@@ -45,6 +45,7 @@ module Roby::Log
45
45
  stop_logging
46
46
  end
47
47
  @loggers.delete logger
48
+ logger.close
48
49
  end
49
50
 
50
51
  # Remove all loggers
@@ -66,7 +67,7 @@ module Roby::Log
66
67
  # Returns true if there is at least one loggr for the +m+ message
67
68
  def has_logger?(m)
68
69
  for l in @loggers
69
- return true if l.respond_to?(m)
70
+ return true if l.logs_message?(m)
70
71
  end
71
72
  false
72
73
  end
@@ -84,8 +85,8 @@ module Roby::Log
84
85
  # Logs +message+ with argument +args+. The block is called only once if
85
86
  # there is at least one logger which listens for +message+.
86
87
  def log(m, args = nil)
87
- if m == :discovered_tasks || m == :discovered_events
88
- Roby::Control.synchronize do
88
+ if m == :added_tasks || m == :added_events
89
+ Roby.synchronize do
89
90
  args ||= yield
90
91
  objects = args[1].to_value_set
91
92
  # Do not give a 'peer' argument at Distributed.format, to
@@ -94,7 +95,7 @@ module Roby::Log
94
95
  known_objects.merge(objects)
95
96
  end
96
97
  elsif m == :finalized_task || m == :finalized_event
97
- Roby::Control.synchronize do
98
+ Roby.synchronize do
98
99
  args ||= yield
99
100
  object = args[1]
100
101
  args = Roby::Distributed.format(args, self) if has_logger?(m)
@@ -104,7 +105,7 @@ module Roby::Log
104
105
 
105
106
  if has_logger?(m)
106
107
  if !args && block_given?
107
- Roby::Control.synchronize do
108
+ Roby.synchronize do
108
109
  args = Roby::Distributed.format(yield, self)
109
110
  end
110
111
  end
@@ -139,7 +140,7 @@ module Roby::Log
139
140
  end
140
141
 
141
142
  rescue Exception => e
142
- Roby.fatal "logger thread dies with #{e.full_message}" unless e.kind_of?(Interrupt)
143
+ Roby::Log.fatal "logger thread dies with #{e.full_message}" unless e.kind_of?(Interrupt)
143
144
 
144
145
  ensure
145
146
  # Wake up any waiting thread
@@ -42,17 +42,17 @@ module Roby
42
42
  data.each_slice(4) do |m, sec, usec, args|
43
43
  time = Time.at(sec, usec)
44
44
  case m.to_s
45
- when /inserted/
45
+ when /added_mission/
46
46
  task = tasks[args[1]]
47
47
  task.mission = true
48
48
  event :added_mission, args[0], task
49
49
 
50
- when /discarded/
50
+ when /unmarked_mission/
51
51
  task = tasks[args[1]]
52
52
  task.mission = false
53
- event :discarded_mission, args[0], task
53
+ event :unmarked_mission, args[0], task
54
54
 
55
- when /discovered_tasks/
55
+ when /added_tasks/
56
56
  args[1].each { |t| added_task(t) }
57
57
 
58
58
  when /finalized_task/
@@ -239,18 +239,30 @@ module Roby
239
239
  clear
240
240
  end
241
241
 
242
+ # Processes one cycle worth of data coming from an EventStream, and
243
+ # builds the corresponding plan representation
244
+ #
245
+ # It returns true if there was something noteworthy in there, and
246
+ # false otherwise.
242
247
  def process(data)
243
248
  @time = data.last[0][:start]
244
249
  @start_time ||= @time
245
250
 
251
+ done_something = false
246
252
  data.each_slice(4) do |m, sec, usec, args|
247
253
  time = Time.at(sec, usec)
248
254
  reason = catch :ignored do
249
255
  begin
250
256
  if respond_to?(m)
251
257
  send(m, time, *args)
258
+ done_someting = true
252
259
  end
253
- displays.each { |d| d.send(m, time, *args) if d.respond_to?(m) }
260
+ displays.each do |d|
261
+ if d.respond_to?(m)
262
+ done_something = true
263
+ d.send(m, time, *args)
264
+ end
265
+ end
254
266
  rescue Exception => e
255
267
  display_args = args.map do |obj|
256
268
  case obj
@@ -269,6 +281,7 @@ module Roby
269
281
  Roby.warn "Ignored #{m}(#{args.join(", ")}): #{reason}"
270
282
  end
271
283
  end
284
+ done_something
272
285
  end
273
286
 
274
287
  def local_object(object)
@@ -295,29 +308,14 @@ module Roby
295
308
  end
296
309
 
297
310
  def clear_integrated
298
- last_finalized.clear
311
+ updated = false
299
312
  plans.each do |plan|
313
+ updated = !(plan.finalized_events.empty? && plan.finalized_tasks.empty?)
300
314
  plan.clear_finalized(plan.finalized_tasks.dup, plan.finalized_events.dup)
301
315
  end
302
316
 
303
- super
304
- end
305
-
306
- def display
307
- plans.each do |plan|
308
- if finalized = last_finalized[plan]
309
- plan.clear_finalized(*finalized)
310
- end
311
- end
312
-
313
- super
314
-
315
- # Save a per-plan set of finalized tasks, to be removed the
316
- # next time #display is called
317
- @last_finalized = Hash.new
318
- plans.each do |plan|
319
- last_finalized[plan] = [plan.finalized_tasks.dup, plan.finalized_events.dup]
320
- end
317
+ super_result = super
318
+ super_result || updated
321
319
  end
322
320
 
323
321
  def local_plan(plan, allow_new = false)
@@ -353,14 +351,14 @@ module Roby
353
351
  end
354
352
  def replaced_tasks(time, plan, from, to)
355
353
  end
356
- def discovered_events(time, plan, events)
354
+ def added_events(time, plan, events)
357
355
  plan = local_plan(plan)
358
356
  events.each do |ev|
359
357
  ev = local_event(ev) { plan }
360
358
  plan.free_events << ev
361
359
  end
362
360
  end
363
- def discovered_tasks(time, plan, tasks)
361
+ def added_tasks(time, plan, tasks)
364
362
  plan = local_plan(plan)
365
363
  tasks.each do |t|
366
364
  t = local_task(t) { plan }