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.
- data/bin/icons/icon.ico +0 -0
- data/bin/icons/icon_48.gif +0 -0
- data/bin/icons/limelight.icns +0 -0
- data/bin/limelight +5 -0
- data/bin/ll +10 -0
- data/bin/ll.bat +5 -0
- data/lib/init.rb +16 -0
- data/lib/limelight.jar +0 -0
- data/lib/limelight/animation.rb +41 -0
- data/lib/limelight/builtin/players.rb +16 -0
- data/lib/limelight/builtin/players/button.rb +39 -0
- data/lib/limelight/builtin/players/check_box.rb +50 -0
- data/lib/limelight/builtin/players/combo_box.rb +89 -0
- data/lib/limelight/builtin/players/combo_box_popup_list.rb +19 -0
- data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +21 -0
- data/lib/limelight/builtin/players/curtains.rb +23 -0
- data/lib/limelight/builtin/players/image.rb +54 -0
- data/lib/limelight/builtin/players/password_box.rb +34 -0
- data/lib/limelight/builtin/players/radio_button.rb +65 -0
- data/lib/limelight/builtin/players/stage_mover.rb +31 -0
- data/lib/limelight/builtin/players/stage_sizer.rb +34 -0
- data/lib/limelight/builtin/players/text_area.rb +34 -0
- data/lib/limelight/builtin/players/text_box.rb +34 -0
- data/lib/limelight/builtin/styles.rb +35 -0
- data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +11 -0
- data/lib/limelight/builtin/utilities_production/alert/props.rb +8 -0
- data/lib/limelight/builtin/utilities_production/alert/styles.rb +14 -0
- data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +20 -0
- data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +12 -0
- data/lib/limelight/builtin/utilities_production/production.rb +62 -0
- data/lib/limelight/builtin/utilities_production/stages.rb +12 -0
- data/lib/limelight/builtin/utilities_production/styles.rb +53 -0
- data/lib/limelight/button_group_cache.rb +11 -0
- data/lib/limelight/casting_director.rb +112 -0
- data/lib/limelight/client/playbills.rb +86 -0
- data/lib/limelight/commands/command.rb +168 -0
- data/lib/limelight/commands/create_command.rb +98 -0
- data/lib/limelight/commands/freeze_command.rb +131 -0
- data/lib/limelight/commands/help_command.rb +61 -0
- data/lib/limelight/commands/open_command.rb +60 -0
- data/lib/limelight/commands/pack_command.rb +45 -0
- data/lib/limelight/commands/unpack_command.rb +44 -0
- data/lib/limelight/commands/version_command.rb +31 -0
- data/lib/limelight/data.rb +37 -0
- data/lib/limelight/dsl/build_exception.rb +55 -0
- data/lib/limelight/dsl/menu_bar.rb +71 -0
- data/lib/limelight/dsl/prop_builder.rb +155 -0
- data/lib/limelight/dsl/stage_builder.rb +105 -0
- data/lib/limelight/dsl/styles_builder.rb +157 -0
- data/lib/limelight/file_chooser.rb +68 -0
- data/lib/limelight/file_filter.rb +33 -0
- data/lib/limelight/file_loader.rb +46 -0
- data/lib/limelight/gems.rb +51 -0
- data/lib/limelight/java_couplings.rb +66 -0
- data/lib/limelight/java_util.rb +49 -0
- data/lib/limelight/limelight_exception.rb +24 -0
- data/lib/limelight/main.rb +108 -0
- data/lib/limelight/paint_action.rb +27 -0
- data/lib/limelight/pen.rb +83 -0
- data/lib/limelight/producer.rb +179 -0
- data/lib/limelight/production.rb +169 -0
- data/lib/limelight/prop.rb +367 -0
- data/lib/limelight/scene.rb +151 -0
- data/lib/limelight/specs/spec_helper.rb +87 -0
- data/lib/limelight/specs/test_scene_opener.rb +60 -0
- data/lib/limelight/stage.rb +292 -0
- data/lib/limelight/string.rb +38 -0
- data/lib/limelight/studio.rb +185 -0
- data/lib/limelight/styles.rb +347 -0
- data/lib/limelight/templates/production_templater.rb +49 -0
- data/lib/limelight/templates/scene_templater.rb +47 -0
- data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
- data/lib/limelight/templates/sources/production/init.rb.template +15 -0
- data/lib/limelight/templates/sources/production/production.rb.template +49 -0
- data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +12 -0
- data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
- data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
- data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
- data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
- data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
- data/lib/limelight/templates/templater.rb +131 -0
- data/lib/limelight/templates/templater_logger.rb +39 -0
- data/lib/limelight/theater.rb +77 -0
- data/lib/limelight/util.rb +65 -0
- data/lib/limelight/util/downloader.rb +115 -0
- data/lib/limelight/version.rb +20 -0
- data/productions/examples/8thlight.com/about/about.txt +24 -0
- data/productions/examples/8thlight.com/about/props.rb +11 -0
- data/productions/examples/8thlight.com/about/styles.rb +2 -0
- data/productions/examples/8thlight.com/footer.rb +6 -0
- data/productions/examples/8thlight.com/home/props.rb +28 -0
- data/productions/examples/8thlight.com/home/styles.rb +2 -0
- data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
- data/productions/examples/8thlight.com/images/bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
- data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/header.jpg +0 -0
- data/productions/examples/8thlight.com/images/moses.jpg +0 -0
- data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
- data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
- data/productions/examples/8thlight.com/menu.rb +11 -0
- data/productions/examples/8thlight.com/services/props.rb +11 -0
- data/productions/examples/8thlight.com/services/services.txt +8 -0
- data/productions/examples/8thlight.com/services/styles.rb +2 -0
- data/productions/examples/8thlight.com/stages.rb +8 -0
- data/productions/examples/8thlight.com/styles.rb +210 -0
- data/productions/examples/calculator/players/button.rb +24 -0
- data/productions/examples/calculator/players/calculator.rb +15 -0
- data/productions/examples/calculator/players/calculator_model.rb +13 -0
- data/productions/examples/calculator/props.rb +23 -0
- data/productions/examples/calculator/styles.rb +36 -0
- data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
- data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
- data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
- data/productions/examples/langstons_ant/init.rb +4 -0
- data/productions/examples/langstons_ant/players/ant.rb +103 -0
- data/productions/examples/langstons_ant/players/log.rb +29 -0
- data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
- data/productions/examples/langstons_ant/players/world.rb +35 -0
- data/productions/examples/langstons_ant/props.rb +22 -0
- data/productions/examples/langstons_ant/styles.rb +104 -0
- data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +10 -0
- data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +32 -0
- data/productions/examples/sandbox/alerts/incompatible_production/production.rb +52 -0
- data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +16 -0
- data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +8 -0
- data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +20 -0
- data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +15 -0
- data/productions/examples/sandbox/alerts/players/alerts.rb +17 -0
- data/productions/examples/sandbox/alerts/props.rb +10 -0
- data/productions/examples/sandbox/alerts/styles.rb +46 -0
- data/productions/examples/sandbox/background_images/props.rb +22 -0
- data/productions/examples/sandbox/background_images/styles.rb +40 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +52 -0
- data/productions/examples/sandbox/click_me/props.rb +8 -0
- data/productions/examples/sandbox/click_me/styles.rb +11 -0
- data/productions/examples/sandbox/floaters/players/floater.rb +108 -0
- data/productions/examples/sandbox/floaters/players/surface.rb +21 -0
- data/productions/examples/sandbox/floaters/props.rb +10 -0
- data/productions/examples/sandbox/floaters/styles.rb +24 -0
- data/productions/examples/sandbox/frameing/players/sandbox.rb +17 -0
- data/productions/examples/sandbox/frameing/props.rb +35 -0
- data/productions/examples/sandbox/frameing/styles.rb +45 -0
- data/productions/examples/sandbox/gradients/players/spinner.rb +20 -0
- data/productions/examples/sandbox/gradients/players/teaser.rb +19 -0
- data/productions/examples/sandbox/gradients/players/wave.rb +19 -0
- data/productions/examples/sandbox/gradients/players/waves.rb +19 -0
- data/productions/examples/sandbox/gradients/props.rb +13 -0
- data/productions/examples/sandbox/gradients/styles.rb +47 -0
- data/productions/examples/sandbox/header.rb +22 -0
- data/productions/examples/sandbox/homer/players/homer.rb +24 -0
- data/productions/examples/sandbox/homer/props.rb +10 -0
- data/productions/examples/sandbox/homer/styles.rb +16 -0
- data/productions/examples/sandbox/images/arch.jpg +0 -0
- data/productions/examples/sandbox/images/beach.jpg +0 -0
- data/productions/examples/sandbox/images/homer.jpg +0 -0
- data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
- data/productions/examples/sandbox/images/logo.png +0 -0
- data/productions/examples/sandbox/images/marilyn.jpg +0 -0
- data/productions/examples/sandbox/images/space.png +0 -0
- data/productions/examples/sandbox/images_scene/props.rb +36 -0
- data/productions/examples/sandbox/images_scene/styles.rb +34 -0
- data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
- data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
- data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
- data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
- data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
- data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
- data/productions/examples/sandbox/inputs/props.rb +40 -0
- data/productions/examples/sandbox/inputs/styles.rb +39 -0
- data/productions/examples/sandbox/kiosk/players/kiosk.rb +39 -0
- data/productions/examples/sandbox/kiosk/props.rb +9 -0
- data/productions/examples/sandbox/kiosk/styles.rb +37 -0
- data/productions/examples/sandbox/players/sandbox.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
- data/productions/examples/sandbox/rounded_corners/styles.rb +17 -0
- data/productions/examples/sandbox/scrolling/players/add_button.rb +19 -0
- data/productions/examples/sandbox/scrolling/players/cell.rb +15 -0
- data/productions/examples/sandbox/scrolling/props.rb +45 -0
- data/productions/examples/sandbox/scrolling/styles.rb +33 -0
- data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
- data/productions/examples/sandbox/sketching/props.rb +25 -0
- data/productions/examples/sandbox/sketching/styles.rb +35 -0
- data/productions/examples/sandbox/sounds/bird.au +0 -0
- data/productions/examples/sandbox/sounds/cat.au +0 -0
- data/productions/examples/sandbox/sounds/cow.au +0 -0
- data/productions/examples/sandbox/sounds/dog.au +0 -0
- data/productions/examples/sandbox/sounds/donkey.au +0 -0
- data/productions/examples/sandbox/sounds/duck.au +0 -0
- data/productions/examples/sandbox/sounds/players/clip.rb +10 -0
- data/productions/examples/sandbox/sounds/props.rb +10 -0
- data/productions/examples/sandbox/sounds/styles.rb +17 -0
- data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +16 -0
- data/productions/examples/sandbox/stage_handles/players/sizer.rb +35 -0
- data/productions/examples/sandbox/stage_handles/props.rb +17 -0
- data/productions/examples/sandbox/stage_handles/styles.rb +58 -0
- data/productions/examples/sandbox/stages.rb +8 -0
- data/productions/examples/sandbox/styles.rb +35 -0
- data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
- data/productions/examples/sandbox/teaser/props.rb +14 -0
- data/productions/examples/sandbox/teaser/styles.rb +21 -0
- data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
- data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
- data/productions/examples/tutorials/tutorial_1/styles.rb +25 -0
- data/productions/playbills.lll +1 -0
- data/productions/stage_composer/init.rb +10 -0
- data/productions/stage_composer/inspector/players/inspector.rb +80 -0
- data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
- data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
- data/productions/stage_composer/inspector/players/style_table.rb +12 -0
- data/productions/stage_composer/inspector/players/style_value.rb +16 -0
- data/productions/stage_composer/inspector/props.rb +19 -0
- data/productions/stage_composer/inspector/styles.rb +71 -0
- data/productions/stage_composer/lib/init.rb +5 -0
- data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
- data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
- data/productions/stage_composer/production.rb +6 -0
- data/productions/stage_composer/stages.rb +15 -0
- data/productions/startup/images/logo.png +0 -0
- data/productions/startup/images/splash.png +0 -0
- data/productions/startup/production.rb +52 -0
- data/productions/startup/spec/default_scene/default_scene_spec.rb +16 -0
- data/productions/startup/spec/spec_helper.rb +8 -0
- data/productions/startup/stages.rb +9 -0
- data/productions/startup/styles.rb +15 -0
- data/productions/startup/welcome/players/browse_button.rb +10 -0
- data/productions/startup/welcome/players/download_button.rb +17 -0
- data/productions/startup/welcome/players/sandbox_button.rb +11 -0
- data/productions/startup/welcome/props.rb +23 -0
- data/productions/startup/welcome/styles.rb +103 -0
- data/spec/limelight/builtin/players/button_spec.rb +20 -0
- data/spec/limelight/builtin/players/check_box_spec.rb +29 -0
- data/spec/limelight/builtin/players/combo_box_spec.rb +29 -0
- data/spec/limelight/builtin/players/image_spec.rb +43 -0
- data/spec/limelight/builtin/players/password_box_spec.rb +27 -0
- data/spec/limelight/builtin/players/radio_button_spec.rb +64 -0
- data/spec/limelight/builtin/players/stage_mover_spec.rb +36 -0
- data/spec/limelight/builtin/players/stage_sizer_spec.rb +40 -0
- data/spec/limelight/builtin/players/text_area_spec.rb +27 -0
- data/spec/limelight/builtin/players/text_box_spec.rb +27 -0
- data/spec/limelight/builtin/utilities_production/spec_helper.rb +7 -0
- data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +146 -0
- data/spec/limelight/casting_director_spec.rb +164 -0
- data/spec/limelight/client/playbills_spec.rb +79 -0
- data/spec/limelight/commands/command_spec.rb +26 -0
- data/spec/limelight/commands/create_command_spec.rb +108 -0
- data/spec/limelight/commands/freeze_command_spec.rb +143 -0
- data/spec/limelight/commands/help_command_spec.rb +42 -0
- data/spec/limelight/commands/open_command_spec.rb +52 -0
- data/spec/limelight/commands/pack_command_spec.rb +26 -0
- data/spec/limelight/commands/unpack_command_spec.rb +47 -0
- data/spec/limelight/data_spec.rb +36 -0
- data/spec/limelight/dsl/prop_builder_spec.rb +245 -0
- data/spec/limelight/dsl/stage_builder_spec.rb +90 -0
- data/spec/limelight/dsl/styles_builder_spec.rb +194 -0
- data/spec/limelight/file_chooser_spec.rb +64 -0
- data/spec/limelight/file_filter_spec.rb +29 -0
- data/spec/limelight/file_loader_spec.rb +28 -0
- data/spec/limelight/gems_spec.rb +92 -0
- data/spec/limelight/java_util_spec.rb +37 -0
- data/spec/limelight/main_spec.rb +40 -0
- data/spec/limelight/paint_action_spec.rb +30 -0
- data/spec/limelight/pen_spec.rb +62 -0
- data/spec/limelight/producer_spec.rb +210 -0
- data/spec/limelight/production_spec.rb +100 -0
- data/spec/limelight/prop_spec.rb +431 -0
- data/spec/limelight/scene_spec.rb +173 -0
- data/spec/limelight/stage_spec.rb +202 -0
- data/spec/limelight/string_spec.rb +38 -0
- data/spec/limelight/studio_spec.rb +157 -0
- data/spec/limelight/styles_spec.rb +53 -0
- data/spec/limelight/templates/production_templater_spec.rb +66 -0
- data/spec/limelight/templates/scene_templater_spec.rb +51 -0
- data/spec/limelight/templates/templater_logger_spec.rb +41 -0
- data/spec/limelight/templates/templater_spec.rb +107 -0
- data/spec/limelight/theater_spec.rb +72 -0
- data/spec/limelight/util/downloader_spec.rb +92 -0
- data/spec/spec_helper.rb +70 -0
- 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
|