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,71 @@
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
+ module DSL
7
+
8
+ class AnonymousActionListener #:nodoc:
9
+ include java.awt.event.ActionListener
10
+
11
+ def initialize(context, symbol)
12
+ @context = context
13
+ @symbol = symbol
14
+ end
15
+
16
+ def actionPerformed(e)
17
+ method = @context.method(@symbol)
18
+ method.call
19
+ end
20
+ end
21
+
22
+ # A class used to build menu bars using a DSL.
23
+ #
24
+ # MenuBar.build(self) do
25
+ # menu("File") do
26
+ # item("Open", :open_chosen_scene)
27
+ # item("Refresh", :reload)
28
+ # end
29
+ # end
30
+ #
31
+ # This example created one menu named 'File' with two menu items: 'Open' and 'Refresh'. The seconds parameter of the
32
+ # menu items is the symbol of a method on the context that will be invoked when the menu item is selected.
33
+ #
34
+ class MenuBar
35
+
36
+ def self.build(context, &prop)
37
+ builder = self.new(context)
38
+ builder.instance_eval(&prop)
39
+ return builder.menu_bar
40
+ end
41
+
42
+ attr_reader :menu_bar
43
+
44
+ # This builder must be provided with a context. All menu item actions will be invoked on the context.
45
+ #
46
+ def initialize(context)
47
+ @context = context
48
+ @menu_bar = javax.swing.JMenuBar.new
49
+ end
50
+
51
+ # Creates a new menu with the provided name
52
+ #
53
+ def menu(name)
54
+ @menu = javax.swing.JMenu.new(name)
55
+ @menu_bar.add(@menu)
56
+ yield
57
+ end
58
+
59
+ # Created a new menu item with the provided name. The symbols paramter is the name of a method on the context
60
+ # that will be invoked when the item is selected.
61
+ #
62
+ def item(name, symbol)
63
+ menu_item = javax.swing.JMenuItem.new(name)
64
+ @menu.add(menu_item)
65
+ menu_item.addActionListener(AnonymousActionListener.new(@context, symbol))
66
+ end
67
+
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,155 @@
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/prop'
5
+ require 'limelight/scene'
6
+ require 'limelight/dsl/build_exception'
7
+ require 'limelight/util'
8
+
9
+ module Limelight
10
+
11
+ # A trigger to build a Limelight::Scene using the PropBuilder DSL.
12
+ #
13
+ # See Limelight::PropBuilder
14
+ #
15
+ def self.build_props(root, options={}, &block)
16
+ loader = options.delete(:build_loader)
17
+ instance_variables = options.delete(:instance_variables)
18
+ root.add_options(options)
19
+ builder = DSL::PropBuilder.new(root)
20
+ builder.__install_instance_variables(instance_variables)
21
+ builder.__loader__ = loader
22
+ builder.instance_eval(&block) if block
23
+ return root
24
+ end
25
+
26
+ module DSL
27
+
28
+ # The basis of the DSL for building Limelight::Prop objects.
29
+ #
30
+ # Sample usage:
31
+ #
32
+ # builder = Limelight::PropBuilder.new(a_prop)
33
+ # builder.instance_eval(&block)
34
+ #
35
+ # The prop passed into the constructor will be the root of the contructed Prop tree.
36
+ # The block passed into instance_eval contains the DSL for building props.
37
+ #
38
+ # Example block/DSL:
39
+ #
40
+ # parent :id => "the_parent" do
41
+ # child_one do
42
+ # grand_child_one :id => "gc_1", :styles => "grand_child"
43
+ # grand_child_two :id => "gc_2", :styles => "grand_child"
44
+ # end
45
+ # child_two
46
+ # end
47
+ #
48
+ # The above example will create a Limelight::Prop named 'parent' and add it to the root prop passed into the builder.
49
+ # The 'parent' prop will contain two props named 'child_one' and 'child_two'. 'child_one' will contain two props named
50
+ # 'grand_child_one' and 'grand_child_two'. 'child_two' has no child props nor do 'grand_child_one' or 'grand_child_two'.
51
+ #
52
+ # An options Hash may be passed into each prop. The key, value pairs in the hash will be used to set properties on the prop
53
+ # when it is added to a Limelight::Scene.
54
+ #
55
+ # See Limelight::Prop
56
+ #
57
+ class PropBuilder
58
+
59
+ alias :__instance_variables :instance_variables
60
+ alias :__instance_variable_get :instance_variable_get
61
+ alias :__instance_variable_set :instance_variable_set
62
+
63
+ Limelight::Util.lobotomize(self)
64
+
65
+ # Returns the root prop either passed in or created by this builder.
66
+ #
67
+ attr_reader :__prop__
68
+ attr_accessor :__loader__
69
+
70
+ # Creates a new builder. If a prop is passed it, it will be the root on which props are created.
71
+ # If the paramter is a Hash, the Hash will be used to construct a prop that will be used as the root.
72
+ #
73
+ def initialize(options)
74
+ if options.is_a?(Prop)
75
+ @__prop__ = options
76
+ else
77
+ @__prop__ = Prop.new(options)
78
+ end
79
+ end
80
+
81
+ # Add extra initialization options to the prop currently under construction.
82
+ #
83
+ # tree :id => "stump" do
84
+ # __ :height => "100%", :width => "30", :background_color => :brown
85
+ # branch :height => "100", :width => "20"
86
+ # branch do
87
+ # __ :height => "100", :width => "20"
88
+ # end
89
+ # end
90
+ #
91
+ # In the above example, the 'tree' prop has the following initialization options: id, height, width, background_color.
92
+ # The two 'branch' child props are identical.
93
+ #
94
+ def __(options)
95
+ @__prop__.add_options(options)
96
+ end
97
+
98
+ # Installs props from another file using the prop DSL. The path will be relative to the
99
+ # root directory of the current production.
100
+ #
101
+ def __install(file, instance_variables = {})
102
+ raise "Cannot install external props because no loader was provided" if @__loader__.nil?
103
+ raise "External prop file: '#{file}' doesn't exist" if !@__loader__.exists?(file)
104
+ content = @__loader__.load(file)
105
+ begin
106
+ self.__install_instance_variables(instance_variables)
107
+ self.instance_eval(content)
108
+ rescue Exception => e
109
+ raise BuildException.new(file, content, e)
110
+ end
111
+ end
112
+
113
+ # Installs instance variables, specified by the passed hash, into the PropBuilder instance.
114
+ # The following call...
115
+ #
116
+ # __install_instance_variables :one => "1", "two" => "two", :three => 3
117
+ #
118
+ # ...will result in the following instance variables.
119
+ #
120
+ # @one = "1"
121
+ # @two = "2"
122
+ # @three = 3
123
+ #
124
+ # Instance variables are propogated to nested builders so that they need only be defined
125
+ # on the top level builder and all children will have access to them.
126
+ #
127
+ def __install_instance_variables(instance_variables)
128
+ return if instance_variables.nil?
129
+ instance_variables.each_pair do |key, value|
130
+ name = "@#{key}"
131
+ __instance_variable_set(name, value)
132
+ end
133
+ end
134
+
135
+ def __install_instance_variables_from_builder(source) #:nodoc:
136
+ source.__instance_variables.each do |name|
137
+ if !__instance_variable_get(name)
138
+ value = source.__instance_variable_get(name)
139
+ __instance_variable_set(name, value)
140
+ end
141
+ end
142
+ end
143
+
144
+ def method_missing(sym, options={}, &prop) # :nodoc:
145
+ options[:name] ||= sym.to_s
146
+ builder = PropBuilder.new(options)
147
+ builder.__install_instance_variables_from_builder(self)
148
+ builder.__loader__ = @__loader__
149
+ builder.instance_eval(&prop) if prop
150
+ @__prop__.add(builder.__prop__)
151
+ end
152
+ end
153
+
154
+ end
155
+ end
@@ -0,0 +1,105 @@
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/stage'
5
+ require 'limelight/limelight_exception'
6
+
7
+ module Limelight
8
+
9
+ # A trigger to build/configure Stage objects using the StageBuilder DSL.
10
+ #
11
+ # See Limelight::Stagesbuilder, Limelight::Stagebuilder
12
+ #
13
+ def self.build_stages(theater, &block)
14
+ builder = DSL::StagesBuilder.new(theater)
15
+ builder.instance_eval(&block) if block
16
+ return builder.__stages__
17
+ end
18
+
19
+ module DSL
20
+
21
+ # The basis of the DSL for building Stage objects.
22
+ #
23
+ # stage "inspector" do
24
+ # default_scene "inspector"
25
+ # title "Limelight Composer Inspector"
26
+ # location [0, 0]
27
+ # size [300, 800]
28
+ # end
29
+ #
30
+ # stage "viewer" do
31
+ # title "Limelight Composer Viewer"
32
+ # location [350, 0]
33
+ # size [800, 800]
34
+ # end
35
+ #
36
+ # In this example above, two stages are created for the production. One is named 'inspector' and the other is named
37
+ # 'viewer'. 'inspector' has a default scene that will be loaded on startup. 'viewer' will not contain any scene
38
+ # on startup. Using the DSL, each stage can be configured to set the title, location, size, or any other attribute
39
+ # of a stage.
40
+ #
41
+ # See Limelight::Stage
42
+ #
43
+ class StagesBuilder
44
+
45
+ Limelight::Util.lobotomize(self)
46
+
47
+ attr_reader :__stages__
48
+
49
+ # Constructs a new StagesBuilder. A Theater object is required as a parameter. Each stages created will belong
50
+ # to the Theater passed in.
51
+ #
52
+ def initialize(theater)
53
+ @__theater__ = theater
54
+ @__stages__ = []
55
+ end
56
+
57
+ # Creates a new stage with the provided name. The block will contain StageBuilder DSL to configure the stage.
58
+ #
59
+ def stage(name, &block)
60
+ stage_builder = StageBuilder.new(@__theater__, name)
61
+ stage_builder.instance_eval(&block) if block
62
+ @__stages__ << stage_builder.__stage__
63
+ end
64
+
65
+ end
66
+
67
+ # The basis of the DSL for configuring a Stage object.
68
+ #
69
+ class StageBuilder
70
+
71
+ Limelight::Util.lobotomize(self)
72
+
73
+ attr_reader :__stage__
74
+
75
+ def initialize(theater, name) #:nodoc:
76
+ if theater[name]
77
+ @__stage__ = theater[name]
78
+ else
79
+ @__stage__ = theater.add_stage(name)
80
+ end
81
+ end
82
+
83
+ # Specifies the scene that will be displayed on the stage upon opening of the production.
84
+ #
85
+ def default_scene(scene_name)
86
+ @__stage__.default_scene = scene_name
87
+ end
88
+
89
+ def method_missing(sym, *values) #:nodoc:
90
+ setter_sym = "#{sym}=".to_s
91
+ raise StageBuilderException.new(sym) if !@__stage__.respond_to?(setter_sym)
92
+ @__stage__.send(setter_sym, *values)
93
+ end
94
+ end
95
+
96
+ # Exception thrown by StageBuilder in the event of an invalid configuration.
97
+ #
98
+ class StageBuilderException < LimelightException
99
+ def initialize(name)
100
+ super("'#{name}' is not a valid stage property")
101
+ end
102
+ end
103
+
104
+ end
105
+ end
@@ -0,0 +1,157 @@
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/util'
5
+
6
+ module Limelight
7
+
8
+ # A trigger to define Style objects using the StyleBuilder DSL.
9
+ #
10
+ # See Limelight::Stylesbuilder, Limelight::Stylebuilder
11
+ #
12
+ def self.build_styles(extendable_styles = nil, &block)
13
+ builder = DSL::StylesBuilder.new(extendable_styles)
14
+ builder.instance_eval(&block) if block
15
+ return builder.__styles
16
+ end
17
+
18
+ def self.build_styles_from_file(filename, extendable_styles = nil)
19
+ content = IO.read(filename)
20
+ styles = Limelight.build_styles(extendable_styles) do
21
+ begin
22
+ eval content
23
+ rescue Exception => e
24
+ raise Limelight::DSL::BuildException.new(filename, content, e)
25
+ end
26
+ end
27
+ return styles
28
+ end
29
+
30
+ module DSL
31
+
32
+ # The basis of the DSL for building Style objects.
33
+ #
34
+ # Sample StyleBuilder DSL
35
+ #
36
+ # sandbox {
37
+ # width "100%"
38
+ # height "100%"
39
+ # vertical_alignment :top
40
+ # }
41
+ #
42
+ # sample {
43
+ # width 320
44
+ # height 320
45
+ # gradient :on
46
+ # }
47
+ #
48
+ # spinner {
49
+ # extends :sample
50
+ # background_color :green
51
+ # secondary_background_color :blue
52
+ # gradient_angle 0
53
+ # gradient_penetration 100
54
+ # }
55
+ #
56
+ # This exmple builds three styles: sandbox, sample, spinner. Within each style block, the individual attributes of
57
+ # the style may be set.
58
+ #
59
+ # See Limelight::Styles
60
+ #
61
+ class StylesBuilder
62
+
63
+ Limelight::Util.lobotomize(self)
64
+
65
+ attr_reader :__styles, :__extendable_styles
66
+
67
+ def initialize(extendable_styles = nil)
68
+ @__extendable_styles = extendable_styles || {}
69
+ @__styles = {}
70
+ end
71
+
72
+ def method_missing(sym, &block) #:nodoc:
73
+ __add_style(sym.to_s, &block)
74
+ end
75
+
76
+ def __add_style(name, &block) #:nodoc:
77
+ style = @__styles[name]
78
+ if style == nil
79
+ style = Styles::RichStyle.new
80
+ extension = @__extendable_styles[name]
81
+ style.add_extension(extension) if extension
82
+ end
83
+ builder = StyleBuilder.new(name, style, self)
84
+ builder.instance_eval(&block) if block
85
+ @__styles[name] = style
86
+ end
87
+ end
88
+
89
+ # The basis of the DSL for defining a Style object.
90
+ #
91
+ class StyleBuilder
92
+
93
+ Limelight::Util.lobotomize(self)
94
+
95
+ attr_reader :__style #:nodoc:
96
+
97
+ def initialize(name, style, styles_builder, options = {}) #:nodoc:
98
+ @__name = name
99
+ @__style = style
100
+ @__styles_builder = styles_builder
101
+ end
102
+
103
+ # Used to define a hover style. Hover styles are appiled when the mouse passed over a prop using the specified style.
104
+ #
105
+ # spinner {
106
+ # width 50
107
+ # height 50
108
+ # hover {
109
+ # text_color :white
110
+ # }
111
+ # }
112
+ #
113
+ # The text color of props using the 'spinner' style will become white when the mouse hovers over them.
114
+ #
115
+ def hover(&block)
116
+ @__styles_builder.__add_style("#{@__name}.hover", &block)
117
+ end
118
+
119
+ # Styles may extend other styles.
120
+ #
121
+ # base {
122
+ # background_color :red
123
+ # }
124
+ #
125
+ # cell {
126
+ # extends :base
127
+ # text_color :black
128
+ # }
129
+ #
130
+ # The 'cell' style now has all attributes defined in 'base'. Therefore any prop using the 'cell' style
131
+ # will have a red background. Styles may override attributes aquired through extension.
132
+ #
133
+ def extends(*style_names)
134
+ style_names.each do |style_name|
135
+ extension = @__styles_builder.__styles[style_name.to_s] || @__styles_builder.__extendable_styles[style_name.to_s]
136
+ raise StyleBuilderException.new("Can't extend missing style: '#{style_name}'") if extension.nil?
137
+ @__style.add_extension(extension)
138
+ end
139
+ end
140
+
141
+ def method_missing(sym, value) #:nodoc:
142
+ setter_sym = "#{sym}=".to_s
143
+ raise StyleBuilderException.new("'#{sym}' is not a valid style") if !@__style.respond_to?(setter_sym)
144
+ @__style.send(setter_sym, value.to_s)
145
+ end
146
+ end
147
+
148
+ # Exception thrown by StyleBuilder when an error is encountered.
149
+ #
150
+ class StyleBuilderException < Exception
151
+ def initialize(message)
152
+ super(message)
153
+ end
154
+ end
155
+
156
+ end
157
+ end