epall-limelight 0.5.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. data/bin/icons/icon.ico +0 -0
  2. data/bin/icons/icon_48.gif +0 -0
  3. data/bin/icons/limelight.icns +0 -0
  4. data/bin/limelight +5 -0
  5. data/bin/ll +10 -0
  6. data/bin/ll.bat +5 -0
  7. data/lib/init.rb +16 -0
  8. data/lib/limelight.jar +0 -0
  9. data/lib/limelight/animation.rb +41 -0
  10. data/lib/limelight/builtin/players.rb +16 -0
  11. data/lib/limelight/builtin/players/button.rb +39 -0
  12. data/lib/limelight/builtin/players/check_box.rb +50 -0
  13. data/lib/limelight/builtin/players/combo_box.rb +89 -0
  14. data/lib/limelight/builtin/players/combo_box_popup_list.rb +19 -0
  15. data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +21 -0
  16. data/lib/limelight/builtin/players/curtains.rb +23 -0
  17. data/lib/limelight/builtin/players/image.rb +54 -0
  18. data/lib/limelight/builtin/players/password_box.rb +34 -0
  19. data/lib/limelight/builtin/players/radio_button.rb +65 -0
  20. data/lib/limelight/builtin/players/stage_mover.rb +31 -0
  21. data/lib/limelight/builtin/players/stage_sizer.rb +34 -0
  22. data/lib/limelight/builtin/players/text_area.rb +34 -0
  23. data/lib/limelight/builtin/players/text_box.rb +34 -0
  24. data/lib/limelight/builtin/styles.rb +35 -0
  25. data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +11 -0
  26. data/lib/limelight/builtin/utilities_production/alert/props.rb +8 -0
  27. data/lib/limelight/builtin/utilities_production/alert/styles.rb +14 -0
  28. data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +20 -0
  29. data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +12 -0
  30. data/lib/limelight/builtin/utilities_production/production.rb +62 -0
  31. data/lib/limelight/builtin/utilities_production/stages.rb +12 -0
  32. data/lib/limelight/builtin/utilities_production/styles.rb +53 -0
  33. data/lib/limelight/button_group_cache.rb +11 -0
  34. data/lib/limelight/casting_director.rb +112 -0
  35. data/lib/limelight/client/playbills.rb +86 -0
  36. data/lib/limelight/commands/command.rb +168 -0
  37. data/lib/limelight/commands/create_command.rb +98 -0
  38. data/lib/limelight/commands/freeze_command.rb +131 -0
  39. data/lib/limelight/commands/help_command.rb +61 -0
  40. data/lib/limelight/commands/open_command.rb +60 -0
  41. data/lib/limelight/commands/pack_command.rb +45 -0
  42. data/lib/limelight/commands/unpack_command.rb +44 -0
  43. data/lib/limelight/commands/version_command.rb +31 -0
  44. data/lib/limelight/data.rb +37 -0
  45. data/lib/limelight/dsl/build_exception.rb +55 -0
  46. data/lib/limelight/dsl/menu_bar.rb +71 -0
  47. data/lib/limelight/dsl/prop_builder.rb +155 -0
  48. data/lib/limelight/dsl/stage_builder.rb +105 -0
  49. data/lib/limelight/dsl/styles_builder.rb +157 -0
  50. data/lib/limelight/file_chooser.rb +68 -0
  51. data/lib/limelight/file_filter.rb +33 -0
  52. data/lib/limelight/file_loader.rb +46 -0
  53. data/lib/limelight/gems.rb +51 -0
  54. data/lib/limelight/java_couplings.rb +66 -0
  55. data/lib/limelight/java_util.rb +49 -0
  56. data/lib/limelight/limelight_exception.rb +24 -0
  57. data/lib/limelight/main.rb +108 -0
  58. data/lib/limelight/paint_action.rb +27 -0
  59. data/lib/limelight/pen.rb +83 -0
  60. data/lib/limelight/producer.rb +179 -0
  61. data/lib/limelight/production.rb +169 -0
  62. data/lib/limelight/prop.rb +367 -0
  63. data/lib/limelight/scene.rb +151 -0
  64. data/lib/limelight/specs/spec_helper.rb +87 -0
  65. data/lib/limelight/specs/test_scene_opener.rb +60 -0
  66. data/lib/limelight/stage.rb +292 -0
  67. data/lib/limelight/string.rb +38 -0
  68. data/lib/limelight/studio.rb +185 -0
  69. data/lib/limelight/styles.rb +347 -0
  70. data/lib/limelight/templates/production_templater.rb +49 -0
  71. data/lib/limelight/templates/scene_templater.rb +47 -0
  72. data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
  73. data/lib/limelight/templates/sources/production/init.rb.template +15 -0
  74. data/lib/limelight/templates/sources/production/production.rb.template +49 -0
  75. data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +12 -0
  76. data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
  77. data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
  78. data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
  79. data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
  80. data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
  81. data/lib/limelight/templates/templater.rb +131 -0
  82. data/lib/limelight/templates/templater_logger.rb +39 -0
  83. data/lib/limelight/theater.rb +77 -0
  84. data/lib/limelight/util.rb +65 -0
  85. data/lib/limelight/util/downloader.rb +115 -0
  86. data/lib/limelight/version.rb +20 -0
  87. data/productions/examples/8thlight.com/about/about.txt +24 -0
  88. data/productions/examples/8thlight.com/about/props.rb +11 -0
  89. data/productions/examples/8thlight.com/about/styles.rb +2 -0
  90. data/productions/examples/8thlight.com/footer.rb +6 -0
  91. data/productions/examples/8thlight.com/home/props.rb +28 -0
  92. data/productions/examples/8thlight.com/home/styles.rb +2 -0
  93. data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
  94. data/productions/examples/8thlight.com/images/bg.jpg +0 -0
  95. data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
  96. data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
  97. data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
  98. data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
  99. data/productions/examples/8thlight.com/images/header.jpg +0 -0
  100. data/productions/examples/8thlight.com/images/moses.jpg +0 -0
  101. data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
  102. data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
  103. data/productions/examples/8thlight.com/menu.rb +11 -0
  104. data/productions/examples/8thlight.com/services/props.rb +11 -0
  105. data/productions/examples/8thlight.com/services/services.txt +8 -0
  106. data/productions/examples/8thlight.com/services/styles.rb +2 -0
  107. data/productions/examples/8thlight.com/stages.rb +8 -0
  108. data/productions/examples/8thlight.com/styles.rb +210 -0
  109. data/productions/examples/calculator/players/button.rb +24 -0
  110. data/productions/examples/calculator/players/calculator.rb +15 -0
  111. data/productions/examples/calculator/players/calculator_model.rb +13 -0
  112. data/productions/examples/calculator/props.rb +23 -0
  113. data/productions/examples/calculator/styles.rb +36 -0
  114. data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
  115. data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
  116. data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
  117. data/productions/examples/langstons_ant/init.rb +4 -0
  118. data/productions/examples/langstons_ant/players/ant.rb +103 -0
  119. data/productions/examples/langstons_ant/players/log.rb +29 -0
  120. data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
  121. data/productions/examples/langstons_ant/players/world.rb +35 -0
  122. data/productions/examples/langstons_ant/props.rb +22 -0
  123. data/productions/examples/langstons_ant/styles.rb +104 -0
  124. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +10 -0
  125. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +32 -0
  126. data/productions/examples/sandbox/alerts/incompatible_production/production.rb +52 -0
  127. data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +16 -0
  128. data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +8 -0
  129. data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +20 -0
  130. data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +15 -0
  131. data/productions/examples/sandbox/alerts/players/alerts.rb +17 -0
  132. data/productions/examples/sandbox/alerts/props.rb +10 -0
  133. data/productions/examples/sandbox/alerts/styles.rb +46 -0
  134. data/productions/examples/sandbox/background_images/props.rb +22 -0
  135. data/productions/examples/sandbox/background_images/styles.rb +40 -0
  136. data/productions/examples/sandbox/click_me/players/chromaton.rb +52 -0
  137. data/productions/examples/sandbox/click_me/props.rb +8 -0
  138. data/productions/examples/sandbox/click_me/styles.rb +11 -0
  139. data/productions/examples/sandbox/floaters/players/floater.rb +108 -0
  140. data/productions/examples/sandbox/floaters/players/surface.rb +21 -0
  141. data/productions/examples/sandbox/floaters/props.rb +10 -0
  142. data/productions/examples/sandbox/floaters/styles.rb +24 -0
  143. data/productions/examples/sandbox/frameing/players/sandbox.rb +17 -0
  144. data/productions/examples/sandbox/frameing/props.rb +35 -0
  145. data/productions/examples/sandbox/frameing/styles.rb +45 -0
  146. data/productions/examples/sandbox/gradients/players/spinner.rb +20 -0
  147. data/productions/examples/sandbox/gradients/players/teaser.rb +19 -0
  148. data/productions/examples/sandbox/gradients/players/wave.rb +19 -0
  149. data/productions/examples/sandbox/gradients/players/waves.rb +19 -0
  150. data/productions/examples/sandbox/gradients/props.rb +13 -0
  151. data/productions/examples/sandbox/gradients/styles.rb +47 -0
  152. data/productions/examples/sandbox/header.rb +22 -0
  153. data/productions/examples/sandbox/homer/players/homer.rb +24 -0
  154. data/productions/examples/sandbox/homer/props.rb +10 -0
  155. data/productions/examples/sandbox/homer/styles.rb +16 -0
  156. data/productions/examples/sandbox/images/arch.jpg +0 -0
  157. data/productions/examples/sandbox/images/beach.jpg +0 -0
  158. data/productions/examples/sandbox/images/homer.jpg +0 -0
  159. data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
  160. data/productions/examples/sandbox/images/logo.png +0 -0
  161. data/productions/examples/sandbox/images/marilyn.jpg +0 -0
  162. data/productions/examples/sandbox/images/space.png +0 -0
  163. data/productions/examples/sandbox/images_scene/props.rb +36 -0
  164. data/productions/examples/sandbox/images_scene/styles.rb +34 -0
  165. data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
  166. data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
  167. data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
  168. data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
  169. data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
  170. data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
  171. data/productions/examples/sandbox/inputs/props.rb +40 -0
  172. data/productions/examples/sandbox/inputs/styles.rb +39 -0
  173. data/productions/examples/sandbox/kiosk/players/kiosk.rb +39 -0
  174. data/productions/examples/sandbox/kiosk/props.rb +9 -0
  175. data/productions/examples/sandbox/kiosk/styles.rb +37 -0
  176. data/productions/examples/sandbox/players/sandbox.rb +11 -0
  177. data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
  178. data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
  179. data/productions/examples/sandbox/rounded_corners/styles.rb +17 -0
  180. data/productions/examples/sandbox/scrolling/players/add_button.rb +19 -0
  181. data/productions/examples/sandbox/scrolling/players/cell.rb +15 -0
  182. data/productions/examples/sandbox/scrolling/props.rb +45 -0
  183. data/productions/examples/sandbox/scrolling/styles.rb +33 -0
  184. data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
  185. data/productions/examples/sandbox/sketching/props.rb +25 -0
  186. data/productions/examples/sandbox/sketching/styles.rb +35 -0
  187. data/productions/examples/sandbox/sounds/bird.au +0 -0
  188. data/productions/examples/sandbox/sounds/cat.au +0 -0
  189. data/productions/examples/sandbox/sounds/cow.au +0 -0
  190. data/productions/examples/sandbox/sounds/dog.au +0 -0
  191. data/productions/examples/sandbox/sounds/donkey.au +0 -0
  192. data/productions/examples/sandbox/sounds/duck.au +0 -0
  193. data/productions/examples/sandbox/sounds/players/clip.rb +10 -0
  194. data/productions/examples/sandbox/sounds/props.rb +10 -0
  195. data/productions/examples/sandbox/sounds/styles.rb +17 -0
  196. data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +16 -0
  197. data/productions/examples/sandbox/stage_handles/players/sizer.rb +35 -0
  198. data/productions/examples/sandbox/stage_handles/props.rb +17 -0
  199. data/productions/examples/sandbox/stage_handles/styles.rb +58 -0
  200. data/productions/examples/sandbox/stages.rb +8 -0
  201. data/productions/examples/sandbox/styles.rb +35 -0
  202. data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
  203. data/productions/examples/sandbox/teaser/props.rb +14 -0
  204. data/productions/examples/sandbox/teaser/styles.rb +21 -0
  205. data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
  206. data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
  207. data/productions/examples/tutorials/tutorial_1/styles.rb +25 -0
  208. data/productions/playbills.lll +1 -0
  209. data/productions/stage_composer/init.rb +10 -0
  210. data/productions/stage_composer/inspector/players/inspector.rb +80 -0
  211. data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
  212. data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
  213. data/productions/stage_composer/inspector/players/style_table.rb +12 -0
  214. data/productions/stage_composer/inspector/players/style_value.rb +16 -0
  215. data/productions/stage_composer/inspector/props.rb +19 -0
  216. data/productions/stage_composer/inspector/styles.rb +71 -0
  217. data/productions/stage_composer/lib/init.rb +5 -0
  218. data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
  219. data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
  220. data/productions/stage_composer/production.rb +6 -0
  221. data/productions/stage_composer/stages.rb +15 -0
  222. data/productions/startup/images/logo.png +0 -0
  223. data/productions/startup/images/splash.png +0 -0
  224. data/productions/startup/production.rb +52 -0
  225. data/productions/startup/spec/default_scene/default_scene_spec.rb +16 -0
  226. data/productions/startup/spec/spec_helper.rb +8 -0
  227. data/productions/startup/stages.rb +9 -0
  228. data/productions/startup/styles.rb +15 -0
  229. data/productions/startup/welcome/players/browse_button.rb +10 -0
  230. data/productions/startup/welcome/players/download_button.rb +17 -0
  231. data/productions/startup/welcome/players/sandbox_button.rb +11 -0
  232. data/productions/startup/welcome/props.rb +23 -0
  233. data/productions/startup/welcome/styles.rb +103 -0
  234. data/spec/limelight/builtin/players/button_spec.rb +20 -0
  235. data/spec/limelight/builtin/players/check_box_spec.rb +29 -0
  236. data/spec/limelight/builtin/players/combo_box_spec.rb +29 -0
  237. data/spec/limelight/builtin/players/image_spec.rb +43 -0
  238. data/spec/limelight/builtin/players/password_box_spec.rb +27 -0
  239. data/spec/limelight/builtin/players/radio_button_spec.rb +64 -0
  240. data/spec/limelight/builtin/players/stage_mover_spec.rb +36 -0
  241. data/spec/limelight/builtin/players/stage_sizer_spec.rb +40 -0
  242. data/spec/limelight/builtin/players/text_area_spec.rb +27 -0
  243. data/spec/limelight/builtin/players/text_box_spec.rb +27 -0
  244. data/spec/limelight/builtin/utilities_production/spec_helper.rb +7 -0
  245. data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +146 -0
  246. data/spec/limelight/casting_director_spec.rb +164 -0
  247. data/spec/limelight/client/playbills_spec.rb +79 -0
  248. data/spec/limelight/commands/command_spec.rb +26 -0
  249. data/spec/limelight/commands/create_command_spec.rb +108 -0
  250. data/spec/limelight/commands/freeze_command_spec.rb +143 -0
  251. data/spec/limelight/commands/help_command_spec.rb +42 -0
  252. data/spec/limelight/commands/open_command_spec.rb +52 -0
  253. data/spec/limelight/commands/pack_command_spec.rb +26 -0
  254. data/spec/limelight/commands/unpack_command_spec.rb +47 -0
  255. data/spec/limelight/data_spec.rb +36 -0
  256. data/spec/limelight/dsl/prop_builder_spec.rb +245 -0
  257. data/spec/limelight/dsl/stage_builder_spec.rb +90 -0
  258. data/spec/limelight/dsl/styles_builder_spec.rb +194 -0
  259. data/spec/limelight/file_chooser_spec.rb +64 -0
  260. data/spec/limelight/file_filter_spec.rb +29 -0
  261. data/spec/limelight/file_loader_spec.rb +28 -0
  262. data/spec/limelight/gems_spec.rb +92 -0
  263. data/spec/limelight/java_util_spec.rb +37 -0
  264. data/spec/limelight/main_spec.rb +40 -0
  265. data/spec/limelight/paint_action_spec.rb +30 -0
  266. data/spec/limelight/pen_spec.rb +62 -0
  267. data/spec/limelight/producer_spec.rb +210 -0
  268. data/spec/limelight/production_spec.rb +100 -0
  269. data/spec/limelight/prop_spec.rb +431 -0
  270. data/spec/limelight/scene_spec.rb +173 -0
  271. data/spec/limelight/stage_spec.rb +202 -0
  272. data/spec/limelight/string_spec.rb +38 -0
  273. data/spec/limelight/studio_spec.rb +157 -0
  274. data/spec/limelight/styles_spec.rb +53 -0
  275. data/spec/limelight/templates/production_templater_spec.rb +66 -0
  276. data/spec/limelight/templates/scene_templater_spec.rb +51 -0
  277. data/spec/limelight/templates/templater_logger_spec.rb +41 -0
  278. data/spec/limelight/templates/templater_spec.rb +107 -0
  279. data/spec/limelight/theater_spec.rb +72 -0
  280. data/spec/limelight/util/downloader_spec.rb +92 -0
  281. data/spec/spec_helper.rb +70 -0
  282. metadata +335 -0
@@ -0,0 +1,27 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/pen'
5
+
6
+ module Limelight
7
+
8
+ # A PaintAction is created by Prop.after_painting.
9
+ #
10
+ class PaintAction #:nodoc:
11
+
12
+ include UI::Painting::PaintAction
13
+
14
+ attr_reader :block
15
+
16
+ def initialize(&block)
17
+ @block = block
18
+ end
19
+
20
+ def invoke(graphics)
21
+ pen = Pen.new(graphics)
22
+ @block.call(pen)
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,83 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+
6
+ # The Pen is acquired from Prop.pen. It is used to draw directly on the screen withing the bounds of the prop
7
+ # from which the Pen was acquired.
8
+ #
9
+ # All points used by the Pen are relative to the bounds of the Prop. The top left corner of the Prop is represented
10
+ # by the point (0, 0). If a Prop has margin, border, or padding, the point (0, 0) may appear to be outside the Prop.
11
+ #
12
+ class Pen
13
+
14
+ attr_accessor :context
15
+
16
+ # It is constructed with a context which is essentially a java.awt.Graphic2D object. Defaults are set:
17
+ # * color = "black"
18
+ # * width = 1
19
+ # * smooth = false
20
+ #
21
+ def initialize(context)
22
+ @context = context
23
+ self.color = "black"
24
+ self.width = 1
25
+ self.smooth = false
26
+ end
27
+
28
+ # Sets the color of the Pen. The passed value should be a string that either names a known color or specifies
29
+ # a hex color value.
30
+ #
31
+ def color=(value)
32
+ resolve_color = Util::Colors.resolve(value)
33
+ @context.setColor(resolve_color)
34
+ end
35
+
36
+ # Sets the width, in pixels, of the pen.
37
+ #
38
+ def width=(value)
39
+ @context.setStroke(java.awt.BasicStroke.new(value))
40
+ end
41
+
42
+ # Specifies whether the pen will use anti-aliasing to draw smooth shapes or not. Shapes will appear pixilated when
43
+ # smooth is set to false.
44
+ #
45
+ def smooth=(value)
46
+ hint = value ? java.awt.RenderingHints::VALUE_ANTIALIAS_ON : java.awt.RenderingHints::VALUE_ANTIALIAS_OFF
47
+ @context.setRenderingHint(java.awt.RenderingHints::KEY_ANTIALIASING, hint)
48
+ end
49
+
50
+ # Draws a line from the point (x1, y1) to the point (x2, y2)
51
+ #
52
+ def draw_line(x1, y1, x2, y2)
53
+ @context.drawLine(x1, y1, x2, y2)
54
+ end
55
+
56
+ # Draws a rectangle with the top left corner at (x, y).
57
+ #
58
+ def draw_rectangle(x, y, width, height)
59
+ @context.drawRect(x, y, width, height)
60
+ end
61
+
62
+ # Fills a rectangle with the current color of the Pen. The top left corner of the rectangle is (x, y).
63
+ #
64
+ def fill_rectangle(x, y, width, height)
65
+ @context.fillRect(x, y, width, height)
66
+ end
67
+
68
+ # Draws the largest oval that will fit in the specified rectangle. The top left corner of the bounding
69
+ # rectangle is at (x, y). The center of the oval will be at (x + width/2, y + height/2).
70
+ #
71
+ def draw_oval(x, y, width, height)
72
+ @context.drawOval(x, y, width, height)
73
+ end
74
+
75
+ # Fills an oval specified by the bounding rectangle. See draw_oval.
76
+ #
77
+ def fill_oval(x, y, width, height)
78
+ @context.fillOval(x, y, width, height)
79
+ end
80
+
81
+ end
82
+
83
+ end
@@ -0,0 +1,179 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/file_loader'
5
+ require 'limelight/dsl/prop_builder'
6
+ require 'limelight/dsl/styles_builder'
7
+ require 'limelight/dsl/stage_builder'
8
+ require 'limelight/casting_director'
9
+ require 'limelight/stage'
10
+ require 'limelight/dsl/build_exception'
11
+ require 'limelight/theater'
12
+ require 'limelight/production'
13
+ require 'limelight/gems'
14
+ require 'limelight/util/downloader'
15
+ require 'limelight/version'
16
+
17
+ module Limelight
18
+
19
+ # A Producer has the hefty responsibility of producing Productions. Given a directory, it will load the neccessary
20
+ # files and create all the neccessary objects to bring a Production to life.
21
+ #
22
+ # For directory structures, see Limelight::Main
23
+ #
24
+ class Producer
25
+
26
+ # Creates a new Producer and has it open a Production by specified name.
27
+ #
28
+ def self.open(production_name, options={})
29
+ producer = new(production_name)
30
+ begin
31
+ producer.open(options)
32
+ rescue Exception => e
33
+ puts e
34
+ puts e.backtrace
35
+ end
36
+ end
37
+
38
+ attr_reader :theater, :production
39
+ attr_writer :builtin_styles
40
+
41
+ # A Production name, or root directory, must be provided. If not Theater is provided, one will be created.
42
+ # You may also provide an existing Production for which this Producer will interact.
43
+ #
44
+ def initialize(root_path, theater=nil, production=nil)
45
+ if (root_path[-4..-1] == ".lll")
46
+ url = IO.read(root_path).strip
47
+ root_path = Util::Downloader.download(url)
48
+ end
49
+ if (root_path[-4..-1] == ".llp")
50
+ root_path = unpack_production(root_path)
51
+ end
52
+ @production = production || Production.new(root_path)
53
+ @theater = theater.nil? ? Theater.new : theater
54
+ establish_production
55
+ end
56
+
57
+ # Returns true if the production's minimum_limelight_version is compatible with the current version.
58
+ #
59
+ def version_compatible?
60
+ current_version = Limelight::Util::Version.new(Limelight::VERSION::STRING)
61
+ required_version = Limelight::Util::Version.new(@production.minimum_limelight_version)
62
+ return required_version.is_less_than_or_equal(current_version)
63
+ end
64
+
65
+ # Returns the CastingDirector for this Production.
66
+ #
67
+ def casting_director
68
+ @casting_director = CastingDirector.new(@production.root) if not @casting_director
69
+ return @casting_director
70
+ end
71
+
72
+ # Loads the Production without opening it. The Production will be created into memory with all it's stages
73
+ #
74
+ def load(options = {})
75
+ Gems.install_gems_in_production(@production)
76
+ Kernel.load(@production.init_file) if ( !options[:ignore_init] && File.exists?(@production.init_file) )
77
+ load_stages if File.exists?(@production.stages_file)
78
+ end
79
+
80
+ # Opens the Production.
81
+ #
82
+ def open(options = {})
83
+ return unless version_compatible? || Studio.utilities_production.proceed_with_incompatible_version?(@production.name, @production.minimum_limelight_version)
84
+ @production.production_opening
85
+ load
86
+ @production.production_loaded
87
+ if @theater.has_stages?
88
+ @theater.stages.each do |stage|
89
+ open_scene(stage.default_scene.to_s, stage) if stage.default_scene
90
+ end
91
+ elsif @production.default_scene
92
+ open_scene(@production.default_scene, @theater.default_stage)
93
+ end
94
+ @casting_director = nil
95
+ @production.production_opened
96
+ end
97
+
98
+ # Opens the specified Scene onto the Spcified Stage.
99
+ #
100
+ def open_scene(name, stage, options={})
101
+ path = @production.scene_directory(name)
102
+ scene_name = File.basename(path)
103
+ scene = load_props(options.merge(:production => @production, :casting_director => casting_director, :path => path, :name => scene_name))
104
+ styles = load_styles(scene)
105
+ scene.styles = styles
106
+ stage.open(scene)
107
+ return scene
108
+ end
109
+
110
+ # Loads the 'stages.rb' file and configures all the Stages in the Production.
111
+ #
112
+ def load_stages
113
+ stages_file = @production.stages_file
114
+ content = IO.read(stages_file)
115
+ stages = Limelight.build_stages(@theater) do
116
+ begin
117
+ eval content
118
+ rescue Exception => e
119
+ raise DSL::BuildException.new(stages_file, content, e)
120
+ end
121
+ end
122
+ return stages
123
+ end
124
+
125
+ # Loads of the 'props.rb' file for a particular Scene and creates all the Prop objects and Scene.
126
+ #
127
+ def load_props(options = {})
128
+ scene = Scene.new(options)
129
+ if File.exists?(scene.props_file)
130
+ content = IO.read(scene.props_file)
131
+ options[:build_loader] = @production.root
132
+ return Limelight.build_props(scene, options) do
133
+ begin
134
+ eval content
135
+ rescue Exception => e
136
+ raise DSL::BuildException.new(scene.props_file, content, e)
137
+ end
138
+ end
139
+ else
140
+ return scene
141
+ end
142
+ end
143
+
144
+ # Loads the specified 'styles.rb' file and created a Hash of Styles.
145
+ #
146
+ def load_styles(context)
147
+ extendable_styles = Studio.builtin_styles.merge(@production.root_styles)
148
+ return extendable_styles.dup if not File.exists?(context.styles_file)
149
+ new_styles = Limelight.build_styles_from_file(context.styles_file, extendable_styles)
150
+ return extendable_styles.merge(new_styles)
151
+ end
152
+
153
+ def establish_production #:nodoc:
154
+ @production.producer = self
155
+ @production.theater = @theater
156
+
157
+ production_file = @production.production_file
158
+ if File.exists?(production_file)
159
+ tmp_module = Module.new
160
+ content = IO.read(production_file)
161
+ tmp_module.module_eval(content, production_file)
162
+ production_module = tmp_module.const_get("Production")
163
+ raise "production.rb should define a module named 'Production'" if production_module.nil?
164
+ @production.extend(production_module)
165
+ end
166
+ end
167
+
168
+ private ###############################################
169
+
170
+ def unpack_production(production_name)
171
+ packer = Limelight::Util::Packer.new()
172
+ dest_dir = File.join(Data.productions_dir, rand.to_s.sub("0.", ""))
173
+ Dir.mkdir(dest_dir)
174
+ return packer.unpack(production_name, dest_dir)
175
+ end
176
+
177
+ end
178
+
179
+ end
@@ -0,0 +1,169 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/limelight_exception'
5
+ require 'limelight/file_loader'
6
+ require 'limelight/studio'
7
+ require 'drb'
8
+
9
+ module Limelight
10
+
11
+ # The root object of Limelight Production. Every Prop in a production has access to its Production object.
12
+ # Therefore it is typical to store reasources in the Production.
13
+ #
14
+ # Productions are configured, and attributes are added, by the ProductionBuilder.
15
+ #
16
+ class Production
17
+
18
+ class << self
19
+
20
+ def [](name) #:nodoc:
21
+ return Studio[name]
22
+ end
23
+
24
+ end
25
+
26
+ attr_reader :name, :root
27
+ attr_accessor :producer, :theater
28
+
29
+ # Users typically need not create Production objects.
30
+ #
31
+ def initialize(path)
32
+ @root = FileLoader.for_root(path)
33
+ @name = File.basename(path)
34
+ end
35
+
36
+ # Sets the name of the Production. The name must be unique amongst all Productions in memory.
37
+ #
38
+ def name=(value)
39
+ Studio.error_if_duplicate_name(value)
40
+ @name = value
41
+ end
42
+
43
+ # Return the path to the root directory of the production
44
+ #
45
+ def path
46
+ return @root.root
47
+ end
48
+
49
+ # Returns the path to the production's init file
50
+ #
51
+ def init_file
52
+ return @root.path_to("init.rb")
53
+ end
54
+
55
+ # Returns the path to the production's production.rb file
56
+ #
57
+ def production_file
58
+ return @root.path_to("production.rb")
59
+ end
60
+
61
+ # Returns the path to the production's stages file
62
+ #
63
+ def stages_file
64
+ return @root.path_to("stages.rb")
65
+ end
66
+
67
+ # Returns the path to the production's styles file
68
+ #
69
+ def styles_file
70
+ return @root.path_to("styles.rb")
71
+ end
72
+
73
+ # Returns the path to the production's gems directory
74
+ #
75
+ def gems_directory
76
+ return @root.path_to("__resources/gems/gems")
77
+ end
78
+
79
+ # Returns the path to the productions gems root
80
+ #
81
+ def gems_root
82
+ return @root.path_to("__resources/gems")
83
+ end
84
+
85
+ # Returns the path to the named Scene's directory within the Production
86
+ #
87
+ def scene_directory(name)
88
+ return @root.root if name == :root
89
+ return @root.path_to(name)
90
+ end
91
+
92
+ # Returns the minimum version of limelight required to run this production. Default: "0.0.0"
93
+ # If the version of limelight used to open this production is less than the minimum,
94
+ # an error will be displayed (starting with version 0.4.0).
95
+ #
96
+ def minimum_limelight_version
97
+ return "0.0.0"
98
+ end
99
+
100
+ # Returns true if the production allows itself to be closed. The system will call this methods when
101
+ # it wishes to close the production, perhaps when the user quits the application. By default the production
102
+ # will always return true.
103
+ #
104
+ def allow_close?
105
+ return true
106
+ end
107
+
108
+ # Called when the production is about to be opened. The default implementation does nothing but you may re-implement
109
+ # it in the production.rb file.
110
+ #
111
+ def production_opening
112
+ end
113
+
114
+ # Called when the production has been loaded. That is, when all the gems have been loaded stages have been
115
+ # instantiated.
116
+ #
117
+ def production_loaded
118
+ end
119
+
120
+ # Called when the production is fully opened. The default implementation does nothing but you may re-implement
121
+ # it in the production.rb file.
122
+ #
123
+ def production_opened
124
+ end
125
+
126
+ # Called when the production is about to be closed. The default implementation does nothing but you may re-implement
127
+ # it in the production.rb file.
128
+ #
129
+ def production_closing
130
+ end
131
+
132
+ # Called when the production is fully closed. The default implementation does nothing but you may re-implement
133
+ # it in the production.rb file.
134
+ #
135
+ def production_closed
136
+ end
137
+
138
+ # Closes the production. If there are no more productions open, the Limelight runtime will shutdown.
139
+ #
140
+ def close
141
+ self.production_closing
142
+ Studio.production_closed(self)
143
+ self.production_closed
144
+ end
145
+
146
+ # Returned the name of the default scene. This is only used when there are not stages defined in the production.
147
+ # Defaults to :root, the production's root directory is the default scene. Return nil if there are not defaults.
148
+ #
149
+ def default_scene
150
+ return :root
151
+ end
152
+
153
+ # A production with multiple Scenes may have a 'styles.rb' file in the root directory. This is called the
154
+ # root_styles. This method loads the root_styles, if they haven't already been loaded, and returns them.
155
+ #
156
+ def root_styles
157
+ unless @root_styles
158
+ if File.exists?(styles_file)
159
+ @root_styles = Limelight.build_styles_from_file(styles_file)
160
+ else
161
+ @root_styles = {}
162
+ end
163
+ end
164
+ return @root_styles
165
+ end
166
+
167
+ end
168
+
169
+ end