epall-limelight 0.5.1-java → 0.5.2-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 (50) hide show
  1. data/lib/init.rb +2 -6
  2. data/lib/limelight.jar +0 -0
  3. data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +4 -1
  4. data/lib/limelight/builtin/utilities_production/production.rb +6 -2
  5. data/lib/limelight/commands/create_command.rb +1 -1
  6. data/lib/limelight/commands/open_command.rb +4 -4
  7. data/lib/limelight/dsl/styles_builder.rb +5 -0
  8. data/lib/limelight/java_couplings.rb +3 -2
  9. data/lib/limelight/limelight_init.rb +12 -0
  10. data/lib/limelight/main.rb +43 -46
  11. data/lib/limelight/producer.rb +54 -13
  12. data/lib/limelight/production.rb +34 -7
  13. data/lib/limelight/scene.rb +1 -1
  14. data/lib/limelight/specs/spec_helper.rb +1 -1
  15. data/lib/limelight/specs/test_scene_opener.rb +3 -0
  16. data/lib/limelight/stage.rb +65 -5
  17. data/lib/limelight/studio.rb +28 -159
  18. data/lib/limelight/styles/style.rb +288 -0
  19. data/lib/limelight/theater.rb +27 -2
  20. data/lib/limelight/version.rb +2 -2
  21. data/productions/examples/sandbox/alerts/players/alerts.rb +1 -1
  22. data/productions/examples/sandbox/stage_handles/players/sizer.rb +3 -0
  23. data/spec/limelight/builtin/players/combo_box_spec.rb +1 -1
  24. data/spec/limelight/builtin/players/radio_button_spec.rb +1 -1
  25. data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +39 -38
  26. data/spec/limelight/casting_director_spec.rb +1 -1
  27. data/spec/limelight/commands/create_command_spec.rb +4 -4
  28. data/spec/limelight/commands/open_command_spec.rb +5 -4
  29. data/spec/limelight/commands/pack_command_spec.rb +1 -1
  30. data/spec/limelight/commands/unpack_command_spec.rb +1 -1
  31. data/spec/limelight/dsl/prop_builder_spec.rb +6 -6
  32. data/spec/limelight/dsl/stage_builder_spec.rb +1 -1
  33. data/spec/limelight/file_chooser_spec.rb +1 -1
  34. data/spec/limelight/file_filter_spec.rb +2 -2
  35. data/spec/limelight/main_spec.rb +2 -2
  36. data/spec/limelight/paint_action_spec.rb +1 -1
  37. data/spec/limelight/pen_spec.rb +1 -1
  38. data/spec/limelight/producer_spec.rb +30 -11
  39. data/spec/limelight/production_spec.rb +12 -20
  40. data/spec/limelight/prop_spec.rb +2 -2
  41. data/spec/limelight/scene_spec.rb +1 -1
  42. data/spec/limelight/stage_spec.rb +51 -6
  43. data/spec/limelight/templates/templater_spec.rb +1 -1
  44. data/spec/limelight/theater_spec.rb +49 -1
  45. data/spec/spec_helper.rb +0 -6
  46. metadata +5 -7
  47. data/lib/limelight/client/playbills.rb +0 -86
  48. data/lib/limelight/styles.rb +0 -347
  49. data/spec/limelight/client/playbills_spec.rb +0 -79
  50. data/spec/limelight/studio_spec.rb +0 -157
data/lib/init.rb CHANGED
@@ -1,16 +1,12 @@
1
1
  #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
2
  #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
3
 
4
- $LIMELIGHT_LIB = File.expand_path(File.dirname(__FILE__))
5
- $: << $LIMELIGHT_LIB unless $:.include?($LIMELIGHT_LIB)
6
- $LIMELIGHT_HOME = File.expand_path(File.join($LIMELIGHT_LIB, ".."))
4
+
7
5
 
8
6
  require 'java'
9
7
  if File.exists?(File.dirname(__FILE__) + "/limelight.jar")
10
8
  require File.expand_path(File.dirname(__FILE__) + "/limelight.jar")
11
9
  end
12
10
 
11
+ require File.expand_path(File.dirname(__FILE__) + "/limelight/limelight_init")
13
12
 
14
- # ENV["GEM_HOME"] = ENV["GEM_PATH"] = File.expand_path(File.dirname(__FILE__) + "/../../jruby/lib/ruby/gems/1.8")
15
- require 'rubygems'
16
- require 'limelight/java_couplings'
data/lib/limelight.jar CHANGED
Binary file
@@ -1,4 +1,7 @@
1
- module Alert
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 Alert #:nodoc:
2
5
 
3
6
  prop_reader :message
4
7
 
@@ -3,13 +3,17 @@
3
3
 
4
4
  require 'monitor'
5
5
 
6
- module Production
6
+ module Production #:nodoc:
7
7
 
8
8
  def production_opening
9
9
  @monitor = Monitor.new
10
10
  @alert_monitor = @monitor.new_cond
11
11
  end
12
12
 
13
+ def allow_close?
14
+ return false
15
+ end
16
+
13
17
  def default_scene
14
18
  nil
15
19
  end
@@ -40,7 +44,7 @@ module Production
40
44
 
41
45
  def alert(message)
42
46
  @alert_monitor = @monitor.new_cond
43
- load_alert_scene(message)
47
+ load_alert_scene(message.to_s)
44
48
  @monitor.synchronize{ @alert_monitor.wait }
45
49
  @alert_stage.close
46
50
  return @alert_response
@@ -53,7 +53,7 @@ module Limelight
53
53
  raise "Missing template type" if @template_type.nil?
54
54
  raise "Unknown template type: #{@template_type}" if !["production", "scene"].include?(@template_type)
55
55
  self.send "parse_#{@template_type}".to_sym, args
56
- @spec_path = File.join(@production_path, "spec") unless @spec_path
56
+ @spec_path = "spec" unless @spec_path
57
57
  end
58
58
 
59
59
  def do_requires #:nodoc:
@@ -18,7 +18,7 @@ module Limelight
18
18
 
19
19
  install_as "open"
20
20
 
21
- DEFAULT_PRODUCTION = File.expand_path($LIMELIGHT_HOME + "/productions/startup")
21
+ DEFAULT_PRODUCTION = File.expand_path($LIMELIGHT_HOME + "/productions/playbills.lll")
22
22
 
23
23
  attr_reader :drb_port
24
24
 
@@ -36,7 +36,7 @@ module Limelight
36
36
  return "<production_path>"
37
37
  end
38
38
 
39
- def do_requires
39
+ def do_requires
40
40
  Main.initialize_context
41
41
  require 'limelight/producer'
42
42
  end
@@ -50,8 +50,8 @@ module Limelight
50
50
  end
51
51
 
52
52
  def process
53
- Studio.publish_on_drb(@drb_port.to_i) if @drb_port
54
- Studio.open(@production_path)
53
+ Context.instance.studio.publish_on_drb(@drb_port.to_i) if @drb_port
54
+ Context.instance.studio.open(@production_path)
55
55
  end
56
56
 
57
57
  end
@@ -143,6 +143,11 @@ module Limelight
143
143
  raise StyleBuilderException.new("'#{sym}' is not a valid style") if !@__style.respond_to?(setter_sym)
144
144
  @__style.send(setter_sym, value.to_s)
145
145
  end
146
+
147
+ # Kernel.y was added by the yaml library in JRuby 1.4. Not sure what to do about this type of problem.
148
+ def y(*args) #:nodoc:
149
+ method_missing(:y, *args)
150
+ end
146
151
  end
147
152
 
148
153
  # Exception thrown by StyleBuilder when an error is encountered.
@@ -1,11 +1,12 @@
1
1
  #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
2
  #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
3
 
4
- module Limelight #:nodoc:
4
+ module Limelight
5
5
 
6
6
  Main = Java::limelight.Main
7
7
  ResourceLoader = Java::limelight.ResourceLoader
8
8
  Context = Java::limelight.Context
9
+ Studio = Java::limelight.Studio
9
10
 
10
11
  module Background
11
12
  Animation = Java::limelight.background.Animation
@@ -50,7 +51,7 @@ module Limelight #:nodoc:
50
51
  Prop = Java::limelight.ui.api.Prop
51
52
  Stage = Java::limelight.ui.api.Stage
52
53
  Theater = Java::limelight.ui.api.Theater
53
- Studio = Java::limelight.ui.api.Studio
54
+ Production = Java::limelight.ui.api.Production
54
55
  end
55
56
 
56
57
  module Painting #:nodoc:
@@ -0,0 +1,12 @@
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
+ $LIMELIGHT_LIB = File.expand_path(File.join(File.dirname(__FILE__), '..'))
5
+ $: << $LIMELIGHT_LIB unless $:.include?($LIMELIGHT_LIB)
6
+ $LIMELIGHT_HOME = File.expand_path(File.join($LIMELIGHT_LIB, ".."))
7
+
8
+ if Java::java.lang.System.getProperty("limelight.home").nil?
9
+ Java::java.lang.System.setProperty("limelight.home", $LIMELIGHT_HOME)
10
+ end
11
+
12
+ require 'limelight/java_couplings'
@@ -5,31 +5,59 @@ require 'limelight/commands/command'
5
5
 
6
6
  module Limelight
7
7
 
8
- # Used to open and manage Limelight Productions.
8
+ # Limelight::Main is used, when installed as a gem, to work with Limelight production. It provides
9
+ # a handful of utilities to create, bundle, and develop with Limelight.
9
10
  #
10
- # Productions may have a single scene or multiple scenes.
11
+ # For example, running the following command will generate a new Limelight production for you.
11
12
  #
12
- # Single-Scene Production Directory Structure:
13
+ # jruby -S limelight create production <production name>
13
14
  #
14
- # - calculator
15
- # | - props.rb
16
- # | - styles.rb
17
- # | - players
18
- # | - <player_name>.rb
19
- # | - *
15
+ # Assuming you used "sandbox" as the name or your production, you'd end up with the following directory structure
16
+ # generated for you.
17
+ #
18
+ # - sandbox
20
19
  # | - stages.rb
20
+ # | - styles.rb
21
21
  # | - production.rb
22
+ # | - default_scene
23
+ # | - props.rb
24
+ # | - styles.rb
25
+ # | - players
26
+ # | - <player_name>.rb
27
+ # | - spec
28
+ # | - spec_helper.rb
29
+ # | - default_scene
30
+ # | - default_scene_spec.rb
22
31
  #
23
- # In a Single-Scene production, the scene name and production name are the same. As seen above, both names are 'calculator'.
24
- # Inside the scene there are three files and one directory, all of which are options.
32
+ # In this case, you've just created a production called "Sandbox". By convention, the name of the production matches the name of the root directory.
33
+ # Notice that there are 3 files and 2 directories. Let's start by talking about the files.
34
+ #
35
+ # == stages.rb
36
+ # This file uses a DSL to configure the stages that will be used in the production.
37
+ # See Limelight::StagesBuilder
38
+ #
39
+ # == styles.rb
40
+ # This file defines production level styles. Each scene may have their own styles but styles defined here will be avaiable to all scenes.
41
+ # See Limelight::StylesBuilder
42
+ #
43
+ # == production.rb
44
+ # This file defines a module names Production where you can defined hooks and behavior for your production.
45
+ # See Limelight::Production
46
+ #
47
+ # For the most part, each directory inside the root directory is a scene. This production has one scene named "default_scene" (this is the default name).
48
+ # Each scene starts out containing 2 file and a directory. Let's look at those..
25
49
  #
26
50
  # == props.rb
27
- # This file defines the props contained in the scene
51
+ # This file defines the structure of your scene. Scenes are composed of Props. In this file you use the Prop DSL to
52
+ # specify all the components of your scene.
28
53
  # See Limelight::PropBuilder
54
+ # See Limelight::Prop
29
55
  #
30
56
  # == styles.rb
31
- # This file defines the styles used in the scene
57
+ # Similar to the styles.rb file located in the root directory, this file contains definitions of styles. However,
58
+ # all styles defined here are only available to the containgin scene. Styles define the look and feel of your scenes.
32
59
  # See Limelight::StylesBuilder
60
+ # See Limelight::Style
33
61
  #
34
62
  # == players
35
63
  # A directory containing all the players used in the scene. Players are modules that are included by Prop objects.
@@ -37,40 +65,9 @@ module Limelight
37
65
  # Inside 'wall.rb' you would define a module named 'Wall'. All behavior defined in the Wall modules will automatically be included
38
66
  # in every prop named 'wall'.
39
67
  #
40
- # == stages.rb
41
- # This file uses a DSL to configure the stages that will be used in the production.
42
- # See Limelight::StagesBuilder
43
- #
44
- # == production.rb
45
- # This file uses a DSL to configure the current Production.
46
- # See Limelight::ProductionBuilder
47
- #
48
- # Multiple-Scene Production Directory Structure:
49
- #
50
- # - sandbox
51
- # | - stages.rb
52
- # | - production.rb
53
- # | - styles.rb
54
- # | - players
55
- # | - <player_name>.rb
56
- # | - fader
57
- # | - props.rb
58
- # | - styles.rb
59
- # | - players
60
- # | - <player_name>.rb
61
- # | - floater
62
- # | - props.rb
63
- # | - styles.rb
64
- # | - players
65
- # | - <player_name>.rb
66
- #
67
- # In a Multiple-Scene production, the production acquires that name of the root directory. In this case the production is named 'sandbox'.
68
- # Each directory inside the root directory is a scene. This production has two scenes named 'fader' and 'floater'. Each scene is structured
69
- # the same as in a Single-Scene production with the exception of the 'stages.rb' file. This file is specific to the production. The production
70
- # may contain a 'styles.rb' which contains styles used by multiple scenes. If some players are used in multiple Scenes, then it is useful to
71
- # to create a players directory in the Production root to hold the common players. Other files may exist in the directory structure and they will not
72
- # conflict with Limelight.
68
+ # So there's a brief overview for you. Besure to check out the Limelight Docs production. You can find it by installing Limelight and starting it up.
73
69
  #
70
+ # For more info on available commands:
74
71
  # See Limelight::Commands
75
72
  #
76
73
  class Main
@@ -23,15 +23,27 @@ module Limelight
23
23
  #
24
24
  class Producer
25
25
 
26
- # Creates a new Producer and has it open a Production by specified name.
27
- #
28
- def self.open(production_name, options={})
29
- producer = new(production_name)
30
- begin
31
- producer.open(options)
32
- rescue Exception => e
33
- puts e
34
- puts e.backtrace
26
+ class << self
27
+ # Creates a new Producer and has it open a Production by specified name.
28
+ #
29
+ def open(production_name, options={})
30
+ producer = new(production_name)
31
+ begin
32
+ producer.open(options)
33
+ rescue Exception => e
34
+ puts e
35
+ puts e.backtrace
36
+ end
37
+ end
38
+
39
+ # Returns a hash of all the built-in Limglight Styles
40
+ #
41
+ def builtin_styles
42
+ unless @builtin_styles
43
+ builtin_styles_file = File.join($LIMELIGHT_LIB, "limelight", "builtin", "styles.rb")
44
+ @builtin_styles = Limelight.build_styles_from_file(builtin_styles_file)
45
+ end
46
+ return @builtin_styles
35
47
  end
36
48
  end
37
49
 
@@ -50,7 +62,7 @@ module Limelight
50
62
  root_path = unpack_production(root_path)
51
63
  end
52
64
  @production = production || Production.new(root_path)
53
- @theater = theater.nil? ? Theater.new : theater
65
+ @theater = theater.nil? ? Theater.new(@production) : theater
54
66
  establish_production
55
67
  end
56
68
 
@@ -77,15 +89,23 @@ module Limelight
77
89
  load_stages if File.exists?(@production.stages_file)
78
90
  end
79
91
 
92
+ # Returns true if the production is compatible with the current version of Limelight or if the user proceeds
93
+ # despite the incompatible warning.
94
+ #
95
+ def can_proceed_with_compatibility?
96
+ return true if version_compatible?
97
+ return true if Context.instance.studio.utilities_production.should_proceed_with_incompatible_version(@production.name, @production.minimum_limelight_version)
98
+ return false
99
+ end
100
+
80
101
  # Opens the Production.
81
102
  #
82
103
  def open(options = {})
83
- return unless version_compatible? || Studio.utilities_production.proceed_with_incompatible_version?(@production.name, @production.minimum_limelight_version)
84
104
  @production.production_opening
85
105
  load
86
106
  @production.production_loaded
87
107
  if @theater.has_stages?
88
- @theater.stages.each do |stage|
108
+ @theater.stages.each do |stage|
89
109
  open_scene(stage.default_scene.to_s, stage) if stage.default_scene
90
110
  end
91
111
  elsif @production.default_scene
@@ -144,12 +164,33 @@ module Limelight
144
164
  # Loads the specified 'styles.rb' file and created a Hash of Styles.
145
165
  #
146
166
  def load_styles(context)
147
- extendable_styles = Studio.builtin_styles.merge(@production.root_styles)
167
+ extendable_styles = Producer.builtin_styles.merge(@production.root_styles)
148
168
  return extendable_styles.dup if not File.exists?(context.styles_file)
149
169
  new_styles = Limelight.build_styles_from_file(context.styles_file, extendable_styles)
150
170
  return extendable_styles.merge(new_styles)
151
171
  end
152
172
 
173
+ # Closes the specified production. The producer will trigger the hook, production_closing and production_closed,
174
+ # to keep the production aware of it's status. The Studio will also be informed of the closure. If no
175
+ # production remain opened, then the Limelight runtine will exit.
176
+ #
177
+ def close(production)
178
+ return if production.closed?
179
+ production.closed = true
180
+ return Thread.new do
181
+ begin
182
+ Thread.pass
183
+ production.production_closing
184
+ production.theater.close
185
+ production.production_closed
186
+ Context.instance.studio.production_closed(production)
187
+ rescue StandardError => e
188
+ puts e
189
+ puts e.backtrace
190
+ end
191
+ end
192
+ end
193
+
153
194
  def establish_production #:nodoc:
154
195
  @production.producer = self
155
196
  @production.theater = @theater
@@ -3,9 +3,10 @@
3
3
 
4
4
  require 'limelight/limelight_exception'
5
5
  require 'limelight/file_loader'
6
- require 'limelight/studio'
6
+ require 'limelight/dsl/styles_builder'
7
7
  require 'drb'
8
8
 
9
+
9
10
  module Limelight
10
11
 
11
12
  # The root object of Limelight Production. Every Prop in a production has access to its Production object.
@@ -15,6 +16,8 @@ module Limelight
15
16
  #
16
17
  class Production
17
18
 
19
+ include UI::Api::Production
20
+
18
21
  class << self
19
22
 
20
23
  def [](name) #:nodoc:
@@ -25,6 +28,8 @@ module Limelight
25
28
 
26
29
  attr_reader :name, :root
27
30
  attr_accessor :producer, :theater
31
+ attr_accessor :closed #:nodoc:
32
+
28
33
 
29
34
  # Users typically need not create Production objects.
30
35
  #
@@ -36,7 +41,7 @@ module Limelight
36
41
  # Sets the name of the Production. The name must be unique amongst all Productions in memory.
37
42
  #
38
43
  def name=(value)
39
- Studio.error_if_duplicate_name(value)
44
+ Context.instance.studio.error_if_duplicate_name(value)
40
45
  @name = value
41
46
  end
42
47
 
@@ -75,7 +80,7 @@ module Limelight
75
80
  def gems_directory
76
81
  return @root.path_to("__resources/gems/gems")
77
82
  end
78
-
83
+
79
84
  # Returns the path to the productions gems root
80
85
  #
81
86
  def gems_root
@@ -86,7 +91,7 @@ module Limelight
86
91
  #
87
92
  def scene_directory(name)
88
93
  return @root.root if name == :root
89
- return @root.path_to(name)
94
+ return @root.path_to(name)
90
95
  end
91
96
 
92
97
  # Returns the minimum version of limelight required to run this production. Default: "0.0.0"
@@ -135,12 +140,24 @@ module Limelight
135
140
  def production_closed
136
141
  end
137
142
 
143
+ # returns true if the production has been closed.
144
+ #
145
+ def closed?
146
+ return @closed
147
+ end
148
+
138
149
  # Closes the production. If there are no more productions open, the Limelight runtime will shutdown.
150
+ # The production will actually delegate to it's producer and the producer will close the production down.
139
151
  #
140
152
  def close
141
- self.production_closing
142
- Studio.production_closed(self)
143
- self.production_closed
153
+ @producer.close(self)
154
+ end
155
+
156
+ # Called when the last stage in this production's theater is closed. If the allow_close? returns true
157
+ # this production will be closed.
158
+ #
159
+ def theater_empty!
160
+ close if allow_close? && !closed?
144
161
  end
145
162
 
146
163
  # Returned the name of the default scene. This is only used when there are not stages defined in the production.
@@ -164,6 +181,16 @@ module Limelight
164
181
  return @root_styles
165
182
  end
166
183
 
184
+ alias :getName :name #:nodoc:
185
+ alias :setName :name= #:nodoc:
186
+ alias :allowClose :allow_close? #:nodoc:
187
+
188
+ def callMethod(name, java_obj_array) #:nodoc:
189
+ args = []
190
+ java_obj_array.length.times { |i| args << java_obj_array[i] }
191
+ send(name.to_sym, *args)
192
+ end
193
+
167
194
  end
168
195
 
169
196
  end