epall-limelight 0.5.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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,367 @@
|
|
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/java_util'
|
5
|
+
require 'limelight/pen'
|
6
|
+
require 'limelight/paint_action'
|
7
|
+
require 'limelight/animation'
|
8
|
+
|
9
|
+
module Limelight
|
10
|
+
|
11
|
+
# Prop is the fundamental building block of a scene. A prop represents a rectangular area in the scene, of almost any dimension.
|
12
|
+
# It may have borders, backgrounds, margin, padding, and it may contain other props or text. However it is the props'
|
13
|
+
# Styles that determine their size and appearance.
|
14
|
+
#
|
15
|
+
# A Prop may have one parent and many children. Hense, when put together, they form a tree structure. The Scene is
|
16
|
+
# the root Prop of a tree.
|
17
|
+
#
|
18
|
+
class Prop
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
def event(event_symbol)
|
23
|
+
@events ||= []
|
24
|
+
@events << event_symbol unless @events.include?(event_symbol)
|
25
|
+
define_method(event_symbol) { |event| } # do nothing by default
|
26
|
+
end
|
27
|
+
|
28
|
+
def events
|
29
|
+
return @events
|
30
|
+
end
|
31
|
+
|
32
|
+
def event2(event_symbol)
|
33
|
+
@events ||= []
|
34
|
+
@events << event_symbol unless @events.include?(event_symbol)
|
35
|
+
define_method("accepts_#{event_symbol}".to_sym) { return self.respond_to?(event_symbol) }
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
include UI::Api::Prop
|
41
|
+
|
42
|
+
attr_accessor :style, :hover_style
|
43
|
+
attr_reader :panel #:nodoc:
|
44
|
+
attr_reader :children, :parent, :name, :id, :players
|
45
|
+
getters :panel, :style, :hover_style, :name, :scene, :loader #:nodoc:
|
46
|
+
|
47
|
+
# When creating a Prop, an optional Hash is accepted. These are called initialization options.
|
48
|
+
# The key/value pairs in the initialiaztion options will be used to
|
49
|
+
# set properties on the Prop, it Style, or included Player properties. These properties are not set
|
50
|
+
# until the prop is added to a Prop tree with a Scene.
|
51
|
+
#
|
52
|
+
def initialize(hash = {})
|
53
|
+
@options = hash || {}
|
54
|
+
@children = []
|
55
|
+
@style = Styles::ScreenableStyle.new
|
56
|
+
@panel = UI::Model::Panel.new(self)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Add a Prop as a child of this Prop.
|
60
|
+
#
|
61
|
+
def add(child)
|
62
|
+
child.set_parent(self)
|
63
|
+
@children << child
|
64
|
+
@panel.add(child.panel)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Same as add. Returns self so adding may be chained.
|
68
|
+
#
|
69
|
+
# prop << child1 << child2 << child3
|
70
|
+
#
|
71
|
+
def <<(child)
|
72
|
+
add(child)
|
73
|
+
return self
|
74
|
+
end
|
75
|
+
|
76
|
+
# Allows the adding of child Props using the PropBuilder DSL.
|
77
|
+
#
|
78
|
+
# prop.build do
|
79
|
+
# child1 do
|
80
|
+
# grand_child
|
81
|
+
# end
|
82
|
+
# child2
|
83
|
+
# end
|
84
|
+
#
|
85
|
+
def build(options = {}, &block)
|
86
|
+
require 'limelight/dsl/prop_builder'
|
87
|
+
builder = Limelight::DSL::PropBuilder.new(self)
|
88
|
+
builder.__install_instance_variables(options)
|
89
|
+
builder.__loader__ = scene.loader
|
90
|
+
builder.instance_eval(&block)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Removes a child Prop. The child Prop will be parentless after removal.
|
94
|
+
#
|
95
|
+
def remove(child)
|
96
|
+
if children.delete(child)
|
97
|
+
scene.unindex_prop(child) if scene
|
98
|
+
@panel.remove(child.panel)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Removes all child Props.
|
103
|
+
#
|
104
|
+
def remove_all
|
105
|
+
@panel.remove_all
|
106
|
+
@children.each { |child| scene.unindex_prop(child) } if scene
|
107
|
+
@children = []
|
108
|
+
end
|
109
|
+
|
110
|
+
# Injects the behavior of the specified Player into the Prop. The Player must be a Module.
|
111
|
+
#
|
112
|
+
def include_player(player_module)
|
113
|
+
unless self.is_a?(player_module)
|
114
|
+
extend player_module
|
115
|
+
self.casted if player_module.instance_methods.include?("casted")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def update #:nodoc:
|
120
|
+
return if (scene.nil? || !scene.visible)
|
121
|
+
@panel.doLayout
|
122
|
+
@panel.repaint
|
123
|
+
end
|
124
|
+
|
125
|
+
def update_now #:nodoc:
|
126
|
+
return if (scene.nil? || !scene.visible)
|
127
|
+
@panel.doLayout()
|
128
|
+
@panel.paintImmediately(0, 0, @panel.width, @panel.height)
|
129
|
+
end
|
130
|
+
|
131
|
+
# A hook to invoke behavior after a Prop is painted.
|
132
|
+
#
|
133
|
+
def after_painting(flag = true, &block)
|
134
|
+
if flag
|
135
|
+
@panel.after_paint_action = PaintAction.new(&block)
|
136
|
+
else
|
137
|
+
@panel.after_paint_action = nil
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# Searches all descendant of the Prop (including itself) for Props with the specified name.
|
142
|
+
# Returns an Array of matching Props. Returns an empty Array if none are found.
|
143
|
+
#
|
144
|
+
def find_by_name(name, results = [])
|
145
|
+
results << self if @name == name
|
146
|
+
@children.each { |child| child.find_by_name(name, results) }
|
147
|
+
return results
|
148
|
+
end
|
149
|
+
|
150
|
+
# Sets the text of this Prop. If a prop is given text, it will become sterilized (it may not have any more children).
|
151
|
+
# Some Players such as text_box, will cause the text to appear in the text_box.
|
152
|
+
#
|
153
|
+
def text=(value)
|
154
|
+
@panel.text = value.to_s
|
155
|
+
end
|
156
|
+
|
157
|
+
# Returns the text of the Prop.
|
158
|
+
#
|
159
|
+
def text
|
160
|
+
return panel.text
|
161
|
+
end
|
162
|
+
|
163
|
+
# Returns the scene to which this prop belongs to.
|
164
|
+
#
|
165
|
+
def scene
|
166
|
+
return nil if @parent.nil?
|
167
|
+
@scene = @parent.scene if @scene.nil?
|
168
|
+
return @scene
|
169
|
+
end
|
170
|
+
|
171
|
+
# TODO get rid of me.... The Java Prop interface declares this method.
|
172
|
+
def loader
|
173
|
+
return scene.production.root;
|
174
|
+
end
|
175
|
+
|
176
|
+
# Returns the current Production this Prop lives in.
|
177
|
+
#
|
178
|
+
def production
|
179
|
+
return scene.production
|
180
|
+
end
|
181
|
+
|
182
|
+
def to_s #:nodoc:
|
183
|
+
return "#{self.class.name}[id: #{@id}, name: #{@name}]"
|
184
|
+
end
|
185
|
+
|
186
|
+
def inspect #:nodoc:
|
187
|
+
return self.to_s
|
188
|
+
end
|
189
|
+
|
190
|
+
# unusual name because it's not part of public api
|
191
|
+
def set_parent(parent) #:nodoc:
|
192
|
+
@parent = parent
|
193
|
+
if @parent.illuminated?
|
194
|
+
illuminate
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Allows the addition of extra initialization options. Will raise an exception if the Prop has already been
|
199
|
+
# illuminated (added to a scene).
|
200
|
+
#
|
201
|
+
def add_options(more_options)
|
202
|
+
raise "Too late to add options" if illuminated?
|
203
|
+
@options.merge!(more_options)
|
204
|
+
end
|
205
|
+
|
206
|
+
# Returns a Box representing the relative bounds of the Prop. Is useful with usign the Pen.
|
207
|
+
#
|
208
|
+
# box = prop.area
|
209
|
+
# box.x, box.y # represents the Prop's location within its parent Prop
|
210
|
+
# box.width, box.height # represents the Prop's dimensions
|
211
|
+
#
|
212
|
+
def area
|
213
|
+
return panel.get_bounding_box.clone
|
214
|
+
end
|
215
|
+
|
216
|
+
# Returns a Box representing the bounds inside the borders of the prop. If the Prop's style has no margin or
|
217
|
+
# border_width, then this will be equivalant to area.
|
218
|
+
#
|
219
|
+
def bordered_area
|
220
|
+
return panel.get_box_inside_borders.clone
|
221
|
+
end
|
222
|
+
|
223
|
+
# Returns a Box representing the bounds inside the padding of the prop. This is the area where child props may
|
224
|
+
# be located
|
225
|
+
#
|
226
|
+
def child_area
|
227
|
+
return panel.getChildConsumableArea().clone
|
228
|
+
end
|
229
|
+
|
230
|
+
# Returns a Pen object. Pen objects allow to you to draw directly on the screen, withing to bounds of this Prop.
|
231
|
+
#
|
232
|
+
def pen
|
233
|
+
return Pen.new(panel.getGraphics)
|
234
|
+
end
|
235
|
+
|
236
|
+
# Initiate an animation loop. Options may include :name (string), :updates_per_second (int: defaults to 60)
|
237
|
+
# An Animation object is returned.
|
238
|
+
# The provided block will be invoked :updates_per_second times per second until the Animation is stopped.
|
239
|
+
#
|
240
|
+
# @animation = prop.animate(:updates_per_second => 20) do
|
241
|
+
# prop.style.border_width = (prop.style.top_border_width.to_i + 1).to_s
|
242
|
+
# @animation.stop if prop.style.top_border_width.to_i > 60
|
243
|
+
# end
|
244
|
+
#
|
245
|
+
# This above example will cause the Prop's border to grow until it is 60 pixels wide.
|
246
|
+
#
|
247
|
+
def animate(options={}, &block)
|
248
|
+
animation = Animation.new(self, block, options)
|
249
|
+
animation.start
|
250
|
+
return animation
|
251
|
+
end
|
252
|
+
|
253
|
+
# Plays a sound on the computers audio output. The parameter is the filename of a .au sound file.
|
254
|
+
# This filename should relative to the root directory of the current Production, or an absolute path.
|
255
|
+
#
|
256
|
+
def play_sound(filename)
|
257
|
+
@panel.play_sound(scene.loader.path_to(filename))
|
258
|
+
end
|
259
|
+
|
260
|
+
# Luanches the spcified URL using the OS's default handlers. For example, opening a URL in a browser:
|
261
|
+
#
|
262
|
+
# launch('http://www.google.com')
|
263
|
+
#
|
264
|
+
# To create a link prop add an accessor on the player (say url) and use that in the prop definition
|
265
|
+
# Ex:
|
266
|
+
#
|
267
|
+
# link :text => "I am a link", :url => "http://www.8thlight.com"
|
268
|
+
def launch(url)
|
269
|
+
Context.instance.os.launch(url)
|
270
|
+
end
|
271
|
+
|
272
|
+
# GUI Events ##########################################
|
273
|
+
|
274
|
+
# TODO MDM - This may be very inefficient. If seems like these methods are generated for each instance of prop.
|
275
|
+
event2 :mouse_clicked
|
276
|
+
event :mouse_entered
|
277
|
+
event :mouse_exited
|
278
|
+
event2 :mouse_pressed
|
279
|
+
event2 :mouse_released
|
280
|
+
event :mouse_dragged
|
281
|
+
event :mouse_moved
|
282
|
+
event :key_typed
|
283
|
+
event :key_pressed
|
284
|
+
event :key_released
|
285
|
+
event :focus_gained
|
286
|
+
event :focus_lost
|
287
|
+
event :button_pressed
|
288
|
+
event :value_changed
|
289
|
+
|
290
|
+
# TODO Try to get me out of public scope
|
291
|
+
#
|
292
|
+
def illuminate #:nodoc:
|
293
|
+
if illuminated?
|
294
|
+
scene.index_prop(self) if @id
|
295
|
+
else
|
296
|
+
set_id(@options.delete(:id))
|
297
|
+
@name = @options.delete(:name)
|
298
|
+
@players = @options.delete(:players)
|
299
|
+
@additional_styles = @options.delete(:styles)
|
300
|
+
|
301
|
+
inherit_styles
|
302
|
+
scene.casting_director.fill_cast(self)
|
303
|
+
apply_options
|
304
|
+
|
305
|
+
@options = nil
|
306
|
+
end
|
307
|
+
|
308
|
+
children.each do |child|
|
309
|
+
child.illuminate
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
def illuminated? #:nodoc:
|
314
|
+
return @options.nil?
|
315
|
+
end
|
316
|
+
|
317
|
+
private ###############################################
|
318
|
+
|
319
|
+
def set_id(id)
|
320
|
+
return if id.nil? || id.to_s.empty?
|
321
|
+
@id = id.to_s
|
322
|
+
scene.index_prop(self)
|
323
|
+
end
|
324
|
+
|
325
|
+
def apply_options
|
326
|
+
@options.each_pair do |key, value|
|
327
|
+
setter_sym = "#{key.to_s}=".to_sym
|
328
|
+
if self.respond_to?(setter_sym)
|
329
|
+
self.send(setter_sym, value)
|
330
|
+
elsif self.style.respond_to?(setter_sym)
|
331
|
+
self.style.send(setter_sym, value.to_s)
|
332
|
+
elsif is_event_setter(key)
|
333
|
+
define_event(key, value)
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def is_event_setter(symbol)
|
339
|
+
string_value = symbol.to_s
|
340
|
+
return string_value[0..2] == "on_" && self.class.events.include?(string_value[3..-1].to_sym)
|
341
|
+
end
|
342
|
+
|
343
|
+
def define_event(symbol, value)
|
344
|
+
event_name = symbol.to_s[3..-1]
|
345
|
+
self.instance_eval "def #{event_name}(event); #{value}; end"
|
346
|
+
end
|
347
|
+
|
348
|
+
def inherit_styles
|
349
|
+
style_names = []
|
350
|
+
style_names << @name unless @name.nil?
|
351
|
+
style_names += @additional_styles.gsub(',', ' ').split(' ') unless @additional_styles.nil?
|
352
|
+
style_names.each do |style_name|
|
353
|
+
new_style = scene.styles[style_name]
|
354
|
+
@style.add_extension(new_style) if new_style
|
355
|
+
new_hover_style = scene.styles["#{style_name}.hover"]
|
356
|
+
if new_hover_style
|
357
|
+
if @hover_style.nil?
|
358
|
+
@hover_style = new_hover_style
|
359
|
+
else
|
360
|
+
@hover_style.add_extension(new_hover_style)
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
end
|
367
|
+
end
|
@@ -0,0 +1,151 @@
|
|
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/java_util'
|
5
|
+
require 'limelight/prop'
|
6
|
+
require 'limelight/button_group_cache'
|
7
|
+
require 'limelight/limelight_exception'
|
8
|
+
require 'limelight/file_loader'
|
9
|
+
|
10
|
+
|
11
|
+
module Limelight
|
12
|
+
|
13
|
+
# A Scene is a root Prop. Scenes may be loaded onto a Stage. In addition to being a Prop object, Scenes have a
|
14
|
+
# few extra attributes and behaviors.
|
15
|
+
#
|
16
|
+
class Scene < Prop
|
17
|
+
include UI::Api::Scene
|
18
|
+
|
19
|
+
attr_reader :button_groups, :casting_director, :cast
|
20
|
+
attr_accessor :stage, :visible, :production, :styles
|
21
|
+
getters :stage, :loader, :styles
|
22
|
+
setters :stage
|
23
|
+
event :scene_opened
|
24
|
+
|
25
|
+
alias :visible? :visible
|
26
|
+
|
27
|
+
def initialize(options={})
|
28
|
+
path = options.delete(:path) || ""
|
29
|
+
@root = FileLoader.for_root(path)
|
30
|
+
super(options)
|
31
|
+
@button_groups = ButtonGroupCache.new
|
32
|
+
@prop_index = {}
|
33
|
+
@cast = Module.new
|
34
|
+
# illuminate
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns self. A Scene is it's own scene.
|
38
|
+
#
|
39
|
+
def scene
|
40
|
+
return self
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns the path to the root directory of the Scene
|
44
|
+
#
|
45
|
+
def path
|
46
|
+
return @root.root
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns the path to the Scene's props file
|
50
|
+
#
|
51
|
+
def props_file
|
52
|
+
return @root.path_to("props.rb")
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns the path to the Scene's props file
|
56
|
+
#
|
57
|
+
def styles_file
|
58
|
+
return @root.path_to("styles.rb")
|
59
|
+
end
|
60
|
+
|
61
|
+
# def add_options(options) #:nodoc:
|
62
|
+
# @options = options
|
63
|
+
# illuminate
|
64
|
+
# end
|
65
|
+
|
66
|
+
# Creates the menu bar for the Scene
|
67
|
+
#
|
68
|
+
def menu_bar
|
69
|
+
return DSL::MenuBar.build(self) do
|
70
|
+
menu("File") do
|
71
|
+
item("Open", :open_chosen_production)
|
72
|
+
item("Refresh", :reload)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Opens a FileChooser for a new Production. Loads the chosen Production.
|
78
|
+
#
|
79
|
+
def open_chosen_production
|
80
|
+
options = { :title => "Open New Limelight Production", :description => "Limelight Production", :directory => @directory }
|
81
|
+
chosen_file = stage.choose_file(options) { |file| Util.is_limelight_scene?(file) || Util.is_limelight_production?(file) }
|
82
|
+
if chosen_file
|
83
|
+
@directory = File.dirname(chosen_file)
|
84
|
+
open_production(chosen_file)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Creates a new Producer to open the specified Production.
|
89
|
+
#
|
90
|
+
def open_production(production_path)
|
91
|
+
Thread.new { Studio.open(production_path) }
|
92
|
+
end
|
93
|
+
|
94
|
+
# Opens the specified Scene on the Stage currently occupied by this Scene.
|
95
|
+
# TODO It doesn't quite make sense that a scene loads other scene. It has to replace itself?
|
96
|
+
#
|
97
|
+
def load(scene_name)
|
98
|
+
@production.producer.open_scene(scene_name, @stage)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Add the Prop to the index. Provides fast lookup by id.
|
102
|
+
#
|
103
|
+
def index_prop(prop)
|
104
|
+
return if prop.id.nil? || prop.id.empty?
|
105
|
+
indexee = @prop_index[prop.id]
|
106
|
+
if indexee.nil?
|
107
|
+
@prop_index[prop.id] = prop
|
108
|
+
else
|
109
|
+
raise LimelightException.new("Duplicate id: #{prop.id}") if indexee != prop
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Removed the Prop from the index.
|
114
|
+
#
|
115
|
+
def unindex_prop(prop)
|
116
|
+
unindex_child_props(prop)
|
117
|
+
@prop_index.delete(prop.id) if prop.id
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns a Prop with the specified id. Returns nil id the Prop doesn't exist in the Scene.
|
121
|
+
#
|
122
|
+
def find(id)
|
123
|
+
return @prop_index[id.to_s]
|
124
|
+
end
|
125
|
+
|
126
|
+
def illuminate #:nodoc:
|
127
|
+
@styles = @options.delete(:styles_hash) || @styles || {}
|
128
|
+
@casting_director = @options.delete(:casting_director) if @options.has_key?(:casting_director)
|
129
|
+
@path = @options.delete(:path) if @options.has_key?(:path)
|
130
|
+
@production = @options.delete(:production) if @options.has_key?(:production)
|
131
|
+
super
|
132
|
+
end
|
133
|
+
|
134
|
+
private ###############################################
|
135
|
+
|
136
|
+
def unindex_child_props(prop)
|
137
|
+
prop.children.each do |child|
|
138
|
+
if child.children.empty?
|
139
|
+
@prop_index.delete(child.id)
|
140
|
+
else
|
141
|
+
unindex_prop(child)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def reload
|
147
|
+
load(File.basename(path))
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|