limelight 0.2.1-java → 0.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/ll.bat +1 -1
- data/lib/i4jruntime.jar +0 -0
- data/lib/junit-4.4.jar +0 -0
- data/lib/limelight.jar +0 -0
- data/lib/limelight/animation.rb +3 -3
- data/lib/limelight/builtin/players.rb +2 -1
- data/lib/limelight/builtin/players/combo_box.rb +8 -2
- data/lib/limelight/builtin/players/image.rb +47 -0
- data/lib/limelight/builtin/styles.rb +1 -1
- data/lib/limelight/casting_director.rb +70 -39
- data/lib/limelight/commands/command.rb +150 -0
- data/lib/limelight/commands/create_command.rb +79 -0
- data/lib/limelight/commands/freeze_command.rb +113 -0
- data/lib/limelight/commands/open_command.rb +49 -0
- data/lib/limelight/commands/pack_command.rb +45 -0
- data/lib/limelight/dsl/build_exception.rb +51 -0
- data/lib/limelight/dsl/menu_bar.rb +71 -0
- data/lib/limelight/dsl/production_builder.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 +134 -0
- data/lib/limelight/file_loader.rb +46 -0
- data/lib/limelight/gems.rb +45 -0
- data/lib/limelight/java_couplings.rb +7 -2
- data/lib/limelight/java_util.rb +2 -15
- data/lib/limelight/main.rb +7 -5
- data/lib/limelight/producer.rb +87 -66
- data/lib/limelight/production.rb +42 -4
- data/lib/limelight/prop.rb +84 -70
- data/lib/limelight/scene.rb +75 -20
- data/lib/limelight/specs/spec_helper.rb +58 -0
- data/lib/limelight/stage.rb +11 -6
- data/lib/limelight/string.rb +35 -0
- data/lib/limelight/studio.rb +29 -0
- data/lib/limelight/templates/production_templater.rb +42 -0
- data/lib/limelight/templates/scene_templater.rb +41 -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 +9 -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/templater.rb +128 -0
- data/lib/limelight/templates/templater_logger.rb +36 -0
- data/lib/limelight/theater.rb +21 -7
- data/lib/limelight/util.rb +22 -6
- data/lib/limelight/version.rb +2 -2
- data/productions/examples/8thlight.com/styles.rb +1 -1
- data/productions/examples/langstons_ant/html_javascript/ant.html +1 -1
- data/productions/examples/langstons_ant/init.rb +1 -0
- data/productions/examples/langstons_ant/players/log.rb +2 -2
- data/productions/examples/langstons_ant/players/world.rb +0 -26
- data/productions/examples/sandbox.llp +0 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +10 -4
- data/productions/examples/sandbox/floaters/players/floater.rb +4 -2
- data/productions/examples/sandbox/gradients/players/spinner.rb +5 -1
- data/productions/examples/sandbox/gradients/players/teaser.rb +2 -2
- data/productions/examples/sandbox/gradients/players/wave.rb +2 -2
- data/productions/examples/sandbox/gradients/players/waves.rb +2 -2
- data/productions/examples/sandbox/header.rb +1 -0
- data/productions/examples/sandbox/images/logo.png +0 -0
- data/productions/examples/sandbox/images_scene/props.rb +25 -0
- data/productions/examples/sandbox/images_scene/styles.rb +30 -0
- data/productions/examples/sandbox/inputs/styles.rb +1 -1
- data/productions/examples/sandbox/scrolling/props.rb +12 -12
- data/productions/examples/sandbox/teaser/players/fader.rb +2 -8
- data/productions/stage_composer/inspector/styles.rb +2 -2
- data/productions/startup/styles.rb +2 -2
- data/spec/builtin/players/button_spec.rb +0 -1
- data/spec/builtin/players/image_spec.rb +41 -0
- data/spec/casting_director_spec.rb +114 -44
- data/spec/commands/command_spec.rb +18 -0
- data/spec/commands/create_command_spec.rb +74 -0
- data/spec/commands/freeze_command_spec.rb +59 -0
- data/spec/commands/open_command_spec.rb +30 -0
- data/spec/commands/pack_command_spec.rb +23 -0
- data/spec/dsl/production_builder_spec.rb +46 -0
- data/spec/{prop_builder_spec.rb → dsl/prop_builder_spec.rb} +80 -24
- data/spec/{stage_builder_spec.rb → dsl/stage_builder_spec.rb} +4 -4
- data/spec/{styles_builder_spec.rb → dsl/styles_builder_spec.rb} +6 -6
- data/spec/{loaders/file_loader_spec.rb → file_loader_spec.rb} +4 -4
- data/spec/gems_spec.rb +83 -0
- data/spec/java_util_spec.rb +1 -17
- data/spec/main_spec.rb +17 -0
- data/spec/producer_spec.rb +89 -79
- data/spec/production_spec.rb +28 -3
- data/spec/prop_spec.rb +82 -16
- data/spec/scene_spec.rb +73 -3
- data/spec/spec_helper.rb +37 -1
- data/spec/stage_spec.rb +10 -1
- data/spec/string_spec.rb +35 -0
- data/spec/studio_spec.rb +14 -0
- data/spec/styles_spec.rb +14 -0
- data/spec/templates/production_templater_spec.rb +44 -0
- data/spec/templates/scene_templater_spec.rb +25 -0
- data/spec/templates/templater_logger_spec.rb +38 -0
- data/spec/templates/templater_spec.rb +104 -0
- data/spec/theater_spec.rb +12 -21
- metadata +75 -23
- data/bin/icons/splash.png +0 -0
- data/lib/limelight/build_exception.rb +0 -48
- data/lib/limelight/commands.rb +0 -52
- data/lib/limelight/loaders/file_scene_loader.rb +0 -49
- data/lib/limelight/menu_bar.rb +0 -68
- data/lib/limelight/production_builder.rb +0 -66
- data/lib/limelight/prop_builder.rb +0 -119
- data/lib/limelight/stage_builder.rb +0 -103
- data/lib/limelight/styles_builder.rb +0 -131
- data/spec/commands_spec.rb +0 -34
- data/spec/production_builder_spec.rb +0 -48
data/lib/limelight/production.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
3
3
|
|
4
4
|
require 'limelight/limelight_exception'
|
5
|
+
require 'limelight/file_loader'
|
5
6
|
|
6
7
|
module Limelight
|
7
8
|
|
@@ -51,13 +52,13 @@ module Limelight
|
|
51
52
|
|
52
53
|
end
|
53
54
|
|
54
|
-
attr_reader :
|
55
|
+
attr_reader :name, :root
|
56
|
+
attr_accessor :producer, :theater
|
55
57
|
|
56
58
|
# Users typically need not create Production objects.
|
57
59
|
#
|
58
|
-
def initialize(
|
59
|
-
@
|
60
|
-
@theater = theater
|
60
|
+
def initialize(path)
|
61
|
+
@root = FileLoader.for_root(path)
|
61
62
|
self.class.index(self)
|
62
63
|
end
|
63
64
|
|
@@ -67,6 +68,43 @@ module Limelight
|
|
67
68
|
self.class.error_if_duplicate_name(value)
|
68
69
|
@name = value
|
69
70
|
end
|
71
|
+
|
72
|
+
# Return the path to the root directory of the production
|
73
|
+
#
|
74
|
+
def path
|
75
|
+
return @root.root
|
76
|
+
end
|
77
|
+
|
78
|
+
# Returns the path to the production's init file
|
79
|
+
#
|
80
|
+
def init_file
|
81
|
+
return @root.path_to("init.rb")
|
82
|
+
end
|
83
|
+
|
84
|
+
# Returns the path to the production's stages file
|
85
|
+
#
|
86
|
+
def stages_file
|
87
|
+
return @root.path_to("stages.rb")
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the path to the production's styles file
|
91
|
+
#
|
92
|
+
def styles_file
|
93
|
+
return @root.path_to("styles.rb")
|
94
|
+
end
|
95
|
+
|
96
|
+
# Returns the path to the production's gems directory
|
97
|
+
#
|
98
|
+
def gems_directory
|
99
|
+
return @root.path_to("__resources/gems")
|
100
|
+
end
|
101
|
+
|
102
|
+
# Returns the path to the named Scene's directory within the Production
|
103
|
+
#
|
104
|
+
def scene_directory(name)
|
105
|
+
return @root.root if name == :root
|
106
|
+
return @root.path_to(name)
|
107
|
+
end
|
70
108
|
|
71
109
|
end
|
72
110
|
|
data/lib/limelight/prop.rb
CHANGED
@@ -16,7 +16,7 @@ module Limelight
|
|
16
16
|
# the root Prop of a tree.
|
17
17
|
#
|
18
18
|
class Prop
|
19
|
-
|
19
|
+
|
20
20
|
class << self
|
21
21
|
|
22
22
|
def event(event_symbol)
|
@@ -29,14 +29,17 @@ module Limelight
|
|
29
29
|
return @events
|
30
30
|
end
|
31
31
|
|
32
|
+
def event2(event_symbol)
|
33
|
+
define_method("accepts_#{event_symbol}".to_sym) { return self.respond_to?(event_symbol) }
|
34
|
+
end
|
35
|
+
|
32
36
|
end
|
33
|
-
|
37
|
+
|
34
38
|
include UI::Api::Prop
|
35
|
-
|
39
|
+
|
36
40
|
attr_reader :panel #:nodoc:
|
37
|
-
attr_reader :style, :hover_style, :children, :
|
38
|
-
getters :panel, :style, :hover_style, :
|
39
|
-
setters :text #:nodoc:
|
41
|
+
attr_reader :style, :hover_style, :children, :parent, :name, :id, :players
|
42
|
+
getters :panel, :style, :hover_style, :name, :scene, :loader #:nodoc:
|
40
43
|
|
41
44
|
# When creating a Prop, an optional Hash is accepted. These are called initialization options.
|
42
45
|
# The key/value pairs in the initialiaztion options will be used to
|
@@ -48,6 +51,7 @@ module Limelight
|
|
48
51
|
@children = []
|
49
52
|
@style = Styles::ScreenableStyle.new
|
50
53
|
@panel = UI::Model::Panel.new(self)
|
54
|
+
@illuminated = false
|
51
55
|
end
|
52
56
|
|
53
57
|
# Add a Prop as a child of this Prop.
|
@@ -77,8 +81,9 @@ module Limelight
|
|
77
81
|
# end
|
78
82
|
#
|
79
83
|
def build(&block)
|
80
|
-
require 'limelight/prop_builder'
|
81
|
-
builder = Limelight::PropBuilder.new(self)
|
84
|
+
require 'limelight/dsl/prop_builder'
|
85
|
+
builder = Limelight::DSL::PropBuilder.new(self)
|
86
|
+
builder.__loader__ = scene.loader
|
82
87
|
builder.instance_eval(&block)
|
83
88
|
end
|
84
89
|
|
@@ -86,6 +91,7 @@ module Limelight
|
|
86
91
|
#
|
87
92
|
def remove(child)
|
88
93
|
if children.delete(child)
|
94
|
+
scene.unindex_prop(child) if scene
|
89
95
|
@panel.remove(child.panel)
|
90
96
|
end
|
91
97
|
end
|
@@ -94,6 +100,7 @@ module Limelight
|
|
94
100
|
#
|
95
101
|
def remove_all
|
96
102
|
@panel.remove_all
|
103
|
+
@children.each { |child| scene.unindex_prop(child) } if scene
|
97
104
|
@children = []
|
98
105
|
end
|
99
106
|
|
@@ -102,18 +109,18 @@ module Limelight
|
|
102
109
|
def include_player(player_module)
|
103
110
|
extend player_module unless self.is_a?(player_module)
|
104
111
|
end
|
105
|
-
|
112
|
+
|
106
113
|
def update #:nodoc:
|
107
|
-
return if(
|
114
|
+
return if (scene.nil? || !scene.visible)
|
108
115
|
@panel.doLayout
|
109
116
|
@panel.repaint
|
110
117
|
end
|
111
|
-
|
118
|
+
|
112
119
|
def update_now #:nodoc:
|
113
|
-
return if(
|
120
|
+
return if (scene.nil? || !scene.visible)
|
114
121
|
@panel.doLayout()
|
115
122
|
@panel.paintImmediately(0, 0, @panel.width, @panel.height)
|
116
|
-
end
|
123
|
+
end
|
117
124
|
|
118
125
|
# A hook to invoke behavior after a Prop is painted.
|
119
126
|
#
|
@@ -125,17 +132,6 @@ module Limelight
|
|
125
132
|
end
|
126
133
|
end
|
127
134
|
|
128
|
-
# Searches all children for a Prop with the given id. Returns the desired Prop if found, nil otherwise.
|
129
|
-
#
|
130
|
-
def find(id)
|
131
|
-
return self if @id == id
|
132
|
-
@children.each do |child|
|
133
|
-
result = child.find(id)
|
134
|
-
return result if result
|
135
|
-
end
|
136
|
-
return nil
|
137
|
-
end
|
138
|
-
|
139
135
|
# Searches all children for Props with the specified name. Returns an Array of matching Props. Returns an
|
140
136
|
# empty Array is none are found.
|
141
137
|
#
|
@@ -157,10 +153,18 @@ module Limelight
|
|
157
153
|
def text
|
158
154
|
return panel.text
|
159
155
|
end
|
160
|
-
|
161
|
-
#
|
162
|
-
|
163
|
-
|
156
|
+
|
157
|
+
# Returns the scene to which this prop belongs to.
|
158
|
+
#
|
159
|
+
def scene
|
160
|
+
return nil if @parent.nil?
|
161
|
+
@scene = @parent.scene if @scene.nil?
|
162
|
+
return @scene
|
163
|
+
end
|
164
|
+
|
165
|
+
# TODO get rid of me.... The Java Prop interface declares this method.
|
166
|
+
def loader
|
167
|
+
return scene.production.root;
|
164
168
|
end
|
165
169
|
|
166
170
|
# Returns the current Production this Prop lives in.
|
@@ -168,27 +172,19 @@ module Limelight
|
|
168
172
|
def production
|
169
173
|
return scene.production
|
170
174
|
end
|
171
|
-
|
175
|
+
|
172
176
|
def to_s #:nodoc:
|
173
177
|
return "#{self.class.name}[id: #{@id}, name: #{@name}]"
|
174
178
|
end
|
175
|
-
|
179
|
+
|
176
180
|
def inspect #:nodoc:
|
177
181
|
return self.to_s
|
178
182
|
end
|
179
|
-
|
183
|
+
|
180
184
|
# unusual name because it's not part of public api
|
181
185
|
def set_parent(parent) #:nodoc:
|
182
186
|
@parent = parent
|
183
|
-
|
184
|
-
end
|
185
|
-
|
186
|
-
# unusual name because it's not part of public api
|
187
|
-
def set_scene(scene) #:nodoc:
|
188
|
-
return if scene == @scene || scene.nil?
|
189
|
-
@scene = scene
|
190
|
-
illuminate
|
191
|
-
children.each { |child| child.set_scene(scene) }
|
187
|
+
illuminate if @parent.illuminated?
|
192
188
|
end
|
193
189
|
|
194
190
|
# Allows the addition of extra initialization options. Will raise an exception if the Prop has already been
|
@@ -206,7 +202,7 @@ module Limelight
|
|
206
202
|
# box.width, box.height # represents the Prop's dimensions
|
207
203
|
#
|
208
204
|
def area
|
209
|
-
return panel.
|
205
|
+
return panel.get_bounding_box.clone
|
210
206
|
end
|
211
207
|
|
212
208
|
# Returns a Box representing the bounds inside the borders of the prop. If the Prop's style has no margin or
|
@@ -226,7 +222,7 @@ module Limelight
|
|
226
222
|
# This filename should relative to the root directory of the current Production, or an absolute path.
|
227
223
|
#
|
228
224
|
def play_sound(filename)
|
229
|
-
@panel.play_sound(
|
225
|
+
@panel.play_sound(scene.loader.path_to(filename))
|
230
226
|
end
|
231
227
|
|
232
228
|
# Initiate an animation loop. Options may include :name (string), :updates_per_second (int: defaults to 60)
|
@@ -245,14 +241,14 @@ module Limelight
|
|
245
241
|
animation.start
|
246
242
|
return animation
|
247
243
|
end
|
248
|
-
|
244
|
+
|
249
245
|
# GUI Events ##########################################
|
250
246
|
|
251
|
-
|
247
|
+
event2 :mouse_clicked
|
252
248
|
event :mouse_entered
|
253
249
|
event :mouse_exited
|
254
|
-
|
255
|
-
|
250
|
+
event2 :mouse_pressed
|
251
|
+
event2 :mouse_released
|
256
252
|
event :mouse_dragged
|
257
253
|
event :mouse_moved
|
258
254
|
event :key_typed
|
@@ -262,29 +258,47 @@ module Limelight
|
|
262
258
|
event :focus_lost
|
263
259
|
event :button_pressed
|
264
260
|
event :value_changed
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
def illuminate
|
261
|
+
|
262
|
+
# TODO Try to get me our of public scope
|
263
|
+
#
|
264
|
+
def illuminate #:nodoc:
|
269
265
|
return if @options.nil?
|
270
266
|
|
271
|
-
@
|
267
|
+
set_id(@options.delete(:id))
|
272
268
|
@name = @options.delete(:name)
|
273
269
|
@players = @options.delete(:players)
|
274
270
|
@additional_styles = @options.delete(:styles)
|
275
|
-
|
271
|
+
|
276
272
|
inherit_styles
|
277
|
-
|
273
|
+
scene.casting_director.fill_cast(self)
|
278
274
|
apply_options
|
279
|
-
|
275
|
+
|
280
276
|
@options = nil
|
277
|
+
|
278
|
+
@illuminated = true
|
279
|
+
|
280
|
+
children.each do |child|
|
281
|
+
child.illuminate unless child.illuminated?
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
def illuminated? #:nodoc:
|
286
|
+
return @illuminated
|
281
287
|
end
|
282
|
-
|
288
|
+
|
289
|
+
private ###############################################
|
290
|
+
|
291
|
+
def set_id(id)
|
292
|
+
return if id.nil? || id.to_s.empty?
|
293
|
+
@id = id.to_s
|
294
|
+
scene.index_prop(self)
|
295
|
+
end
|
296
|
+
|
283
297
|
def apply_options
|
284
298
|
@options.each_pair do |key, value|
|
285
|
-
setter_sym = "#{key.to_s}=".to_sym
|
299
|
+
setter_sym = "#{key.to_s}=".to_sym
|
286
300
|
if self.respond_to?(setter_sym)
|
287
|
-
self.send(setter_sym, value)
|
301
|
+
self.send(setter_sym, value)
|
288
302
|
elsif self.style.respond_to?(setter_sym)
|
289
303
|
self.style.send(setter_sym, value.to_s)
|
290
304
|
elsif is_event_setter(key)
|
@@ -292,23 +306,23 @@ module Limelight
|
|
292
306
|
end
|
293
307
|
end
|
294
308
|
end
|
295
|
-
|
309
|
+
|
296
310
|
def is_event_setter(symbol)
|
297
311
|
string_value = symbol.to_s
|
298
312
|
return string_value[0..2] == "on_" and self.events.include?(string_value[3..-1].to_sym)
|
299
313
|
end
|
300
|
-
|
314
|
+
|
301
315
|
def define_event(symbol, value)
|
302
316
|
event_name = symbol.to_s[3..-1]
|
303
317
|
self.instance_eval "def #{event_name}(event); #{value}; end"
|
304
318
|
end
|
305
|
-
|
319
|
+
|
306
320
|
def inherit_styles
|
307
321
|
style_names = []
|
308
322
|
style_names << @name unless @name.nil?
|
309
323
|
style_names += @additional_styles.gsub(',', ' ').split(' ') unless @additional_styles.nil?
|
310
|
-
style_names.each do |style_name|
|
311
|
-
new_style =
|
324
|
+
style_names.each do |style_name|
|
325
|
+
new_style = scene.styles[style_name]
|
312
326
|
@style.add_extension(new_style) if new_style
|
313
327
|
new_hover_style = scene.styles["#{style_name}.hover"]
|
314
328
|
if new_hover_style
|
@@ -321,13 +335,13 @@ module Limelight
|
|
321
335
|
end
|
322
336
|
end
|
323
337
|
|
324
|
-
# Why is this method here? No one appears to use it.
|
325
|
-
# def disinherit_styles
|
326
|
-
# return if @name.nil?
|
327
|
-
# old_style =
|
328
|
-
# @style.remove_extension(old_style) if old_style
|
329
|
-
# @hover_style = nil
|
330
|
-
# end
|
331
|
-
|
338
|
+
# Why is this method here? No one appears to use it.
|
339
|
+
# def disinherit_styles
|
340
|
+
# return if @name.nil?
|
341
|
+
# old_style = scene.styles[@name]
|
342
|
+
# @style.remove_extension(old_style) if old_style
|
343
|
+
# @hover_style = nil
|
344
|
+
# end
|
345
|
+
|
332
346
|
end
|
333
347
|
end
|
data/lib/limelight/scene.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
require 'limelight/java_util'
|
5
5
|
require 'limelight/prop'
|
6
6
|
require 'limelight/button_group_cache'
|
7
|
+
require 'limelight/limelight_exception'
|
8
|
+
require 'limelight/file_loader'
|
7
9
|
|
8
10
|
module Limelight
|
9
11
|
|
@@ -11,31 +13,58 @@ module Limelight
|
|
11
13
|
# few extra attributes and behaviors.
|
12
14
|
#
|
13
15
|
class Scene < Prop
|
14
|
-
|
16
|
+
|
15
17
|
include UI::Api::Scene
|
16
|
-
|
17
|
-
attr_reader :button_groups, :
|
18
|
-
attr_accessor :stage, :
|
18
|
+
|
19
|
+
attr_reader :button_groups, :casting_director, :cast
|
20
|
+
attr_accessor :stage, :visible, :production, :styles
|
19
21
|
getters :stage, :loader, :styles
|
20
22
|
setters :stage
|
21
23
|
event :scene_opened
|
22
|
-
|
24
|
+
|
23
25
|
def initialize(options={})
|
26
|
+
path = options.delete(:path) || ""
|
27
|
+
@root = FileLoader.for_root(path)
|
24
28
|
super(options)
|
25
|
-
@scene = self
|
26
29
|
@button_groups = ButtonGroupCache.new
|
27
|
-
|
30
|
+
@prop_index = {}
|
31
|
+
@cast = Module.new
|
32
|
+
# illuminate
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns self. A Scene is it's own scene.
|
36
|
+
#
|
37
|
+
def scene
|
38
|
+
return self
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns the path to the root directory of the Scene
|
42
|
+
#
|
43
|
+
def path
|
44
|
+
return @root.root
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns the path to the Scene's props file
|
48
|
+
#
|
49
|
+
def props_file
|
50
|
+
return @root.path_to("props.rb")
|
28
51
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
52
|
+
|
53
|
+
# Returns the path to the Scene's props file
|
54
|
+
#
|
55
|
+
def styles_file
|
56
|
+
return @root.path_to("styles.rb")
|
33
57
|
end
|
34
58
|
|
59
|
+
# def add_options(options) #:nodoc:
|
60
|
+
# @options = options
|
61
|
+
# illuminate
|
62
|
+
# end
|
63
|
+
|
35
64
|
# Creates the menu bar for the Scene
|
36
65
|
#
|
37
66
|
def menu_bar
|
38
|
-
return MenuBar.build(self) do
|
67
|
+
return DSL::MenuBar.build(self) do
|
39
68
|
menu("File") do
|
40
69
|
item("Open", :open_chosen_production)
|
41
70
|
item("Refresh", :reload)
|
@@ -61,23 +90,49 @@ module Limelight
|
|
61
90
|
producer.open
|
62
91
|
end
|
63
92
|
|
64
|
-
# Opens the specified Scene on the Stage currently occupied by this Scene.
|
93
|
+
# Opens the specified Scene on the Stage currently occupied by this Scene.
|
94
|
+
# TODO It doesn't quite make sense that a scene loads other scene. It has to replace itself?
|
65
95
|
#
|
66
96
|
def load(scene_name)
|
67
97
|
@production.producer.open_scene(scene_name, @stage)
|
68
98
|
end
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
def
|
99
|
+
|
100
|
+
# Add the Prop to the index. Provides fast lookup by id.
|
101
|
+
#
|
102
|
+
def index_prop(prop)
|
103
|
+
return if prop.id.nil? || prop.id.empty?
|
104
|
+
indexee = @prop_index[prop.id]
|
105
|
+
if indexee.nil?
|
106
|
+
@prop_index[prop.id] = prop
|
107
|
+
else
|
108
|
+
raise LimelightException.new("Duplicate id: #{prop.id}") if indexee != prop
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Removed the Prop from the index.
|
113
|
+
#
|
114
|
+
def unindex_prop(prop)
|
115
|
+
@prop_index.delete(prop.id) if prop.id
|
116
|
+
end
|
117
|
+
|
118
|
+
# Returns a Prop with the specified id. Returns nil id the Prop doesn't exist in the Scene.
|
119
|
+
#
|
120
|
+
def find(id)
|
121
|
+
return @prop_index[id.to_s]
|
122
|
+
end
|
123
|
+
|
124
|
+
def illuminate #:nodoc:
|
73
125
|
@styles = @options.has_key?(:styles) ? @options.delete(:styles) : (@styles || {})
|
74
126
|
@casting_director = @options.delete(:casting_director) if @options.has_key?(:casting_director)
|
127
|
+
@path = @options.delete(:path) if @options.has_key?(:path)
|
75
128
|
super
|
76
129
|
end
|
77
|
-
|
130
|
+
|
131
|
+
private ###############################################
|
132
|
+
|
78
133
|
def reload
|
79
|
-
load(
|
134
|
+
load(File.basename(path))
|
80
135
|
end
|
81
|
-
|
136
|
+
|
82
137
|
end
|
83
138
|
end
|