limelight 0.3.1-java → 0.4.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. data/lib/init.rb +5 -2
  2. data/lib/limelight/animation.rb +2 -2
  3. data/lib/limelight/builtin/players/button.rb +1 -1
  4. data/lib/limelight/builtin/players/check_box.rb +1 -1
  5. data/lib/limelight/builtin/players/combo_box.rb +2 -4
  6. data/lib/limelight/builtin/players/combo_box_popup_list.rb +1 -1
  7. data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +1 -1
  8. data/lib/limelight/builtin/players/curtains.rb +1 -1
  9. data/lib/limelight/builtin/players/image.rb +3 -0
  10. data/lib/limelight/builtin/players/password_box.rb +1 -1
  11. data/lib/limelight/builtin/players/radio_button.rb +1 -1
  12. data/lib/limelight/builtin/players/text_area.rb +1 -1
  13. data/lib/limelight/builtin/players/text_box.rb +1 -1
  14. data/lib/limelight/builtin/players.rb +1 -1
  15. data/lib/limelight/builtin/styles.rb +1 -1
  16. data/lib/limelight/builtin/utilities_production/alert/props.rb +5 -0
  17. data/lib/limelight/builtin/utilities_production/alert/styles.rb +7 -0
  18. data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +17 -0
  19. data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +9 -0
  20. data/lib/limelight/builtin/utilities_production/production.rb +59 -0
  21. data/lib/limelight/builtin/utilities_production/stages.rb +9 -0
  22. data/lib/limelight/builtin/utilities_production/styles.rb +50 -0
  23. data/lib/limelight/button_group_cache.rb +1 -1
  24. data/lib/limelight/casting_director.rb +1 -1
  25. data/lib/limelight/client/playbills.rb +3 -0
  26. data/lib/limelight/commands/command.rb +13 -7
  27. data/lib/limelight/commands/create_command.rb +13 -8
  28. data/lib/limelight/commands/freeze_command.rb +3 -0
  29. data/lib/limelight/commands/help_command.rb +12 -1
  30. data/lib/limelight/commands/open_command.rb +11 -1
  31. data/lib/limelight/commands/pack_command.rb +1 -1
  32. data/lib/limelight/commands/unpack_command.rb +1 -1
  33. data/lib/limelight/commands/version_command.rb +1 -1
  34. data/lib/limelight/data.rb +4 -14
  35. data/lib/limelight/dsl/build_exception.rb +12 -8
  36. data/lib/limelight/dsl/menu_bar.rb +1 -1
  37. data/lib/limelight/dsl/production_builder.rb +1 -1
  38. data/lib/limelight/dsl/prop_builder.rb +2 -2
  39. data/lib/limelight/dsl/stage_builder.rb +3 -3
  40. data/lib/limelight/dsl/styles_builder.rb +2 -1
  41. data/lib/limelight/file_chooser.rb +1 -1
  42. data/lib/limelight/file_filter.rb +1 -1
  43. data/lib/limelight/file_loader.rb +1 -1
  44. data/lib/limelight/gems.rb +4 -0
  45. data/lib/limelight/java_couplings.rb +3 -2
  46. data/lib/limelight/java_util.rb +1 -1
  47. data/lib/limelight/limelight_exception.rb +1 -1
  48. data/lib/limelight/main.rb +1 -1
  49. data/lib/limelight/paint_action.rb +1 -1
  50. data/lib/limelight/pen.rb +1 -1
  51. data/lib/limelight/producer.rb +52 -37
  52. data/lib/limelight/production.rb +81 -43
  53. data/lib/limelight/prop.rb +32 -13
  54. data/lib/limelight/scene.rb +19 -14
  55. data/lib/limelight/specs/spec_helper.rb +55 -28
  56. data/lib/limelight/stage.rb +163 -23
  57. data/lib/limelight/string.rb +3 -0
  58. data/lib/limelight/studio.rb +143 -6
  59. data/lib/limelight/styles.rb +14 -1
  60. data/lib/limelight/templates/production_templater.rb +6 -2
  61. data/lib/limelight/templates/scene_templater.rb +12 -7
  62. data/lib/limelight/templates/sources/production/production.rb.template +46 -6
  63. data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +5 -0
  64. data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
  65. data/lib/limelight/templates/templater.rb +4 -1
  66. data/lib/limelight/templates/templater_logger.rb +3 -0
  67. data/lib/limelight/theater.rb +15 -6
  68. data/lib/limelight/util/downloader.rb +3 -1
  69. data/lib/limelight/util.rb +8 -7
  70. data/lib/limelight/version.rb +3 -3
  71. data/lib/limelight.jar +0 -0
  72. data/productions/examples/8thlight.com/about/props.rb +1 -1
  73. data/productions/examples/8thlight.com/about/styles.rb +1 -1
  74. data/productions/examples/8thlight.com/footer.rb +1 -1
  75. data/productions/examples/8thlight.com/home/props.rb +1 -1
  76. data/productions/examples/8thlight.com/home/styles.rb +1 -1
  77. data/productions/examples/8thlight.com/menu.rb +1 -1
  78. data/productions/examples/8thlight.com/services/props.rb +1 -1
  79. data/productions/examples/8thlight.com/services/styles.rb +1 -1
  80. data/productions/examples/8thlight.com/stages.rb +1 -1
  81. data/productions/examples/8thlight.com/styles.rb +1 -1
  82. data/productions/examples/calculator/players/button.rb +1 -1
  83. data/productions/examples/calculator/players/calculator.rb +1 -1
  84. data/productions/examples/calculator/players/calculator_model.rb +1 -1
  85. data/productions/examples/calculator/props.rb +1 -1
  86. data/productions/examples/calculator/styles.rb +1 -1
  87. data/productions/examples/langstons_ant/init.rb +3 -0
  88. data/productions/examples/langstons_ant/players/ant.rb +1 -1
  89. data/productions/examples/langstons_ant/players/log.rb +1 -1
  90. data/productions/examples/langstons_ant/players/start_stop_button.rb +1 -1
  91. data/productions/examples/langstons_ant/players/world.rb +1 -1
  92. data/productions/examples/langstons_ant/props.rb +1 -1
  93. data/productions/examples/langstons_ant/styles.rb +1 -1
  94. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +7 -0
  95. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +29 -0
  96. data/productions/examples/sandbox/alerts/incompatible_production/production.rb +49 -0
  97. data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +13 -0
  98. data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +5 -0
  99. data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +17 -0
  100. data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +12 -0
  101. data/productions/examples/sandbox/alerts/players/alerts.rb +14 -0
  102. data/productions/examples/sandbox/alerts/props.rb +7 -0
  103. data/productions/examples/sandbox/alerts/styles.rb +43 -0
  104. data/productions/examples/sandbox/background_images/props.rb +19 -0
  105. data/productions/examples/sandbox/background_images/styles.rb +40 -0
  106. data/productions/examples/sandbox/click_me/players/chromaton.rb +1 -1
  107. data/productions/examples/sandbox/click_me/props.rb +1 -1
  108. data/productions/examples/sandbox/click_me/styles.rb +1 -1
  109. data/productions/examples/sandbox/floaters/players/floater.rb +9 -5
  110. data/productions/examples/sandbox/floaters/players/surface.rb +1 -1
  111. data/productions/examples/sandbox/floaters/props.rb +1 -1
  112. data/productions/examples/sandbox/floaters/styles.rb +13 -13
  113. data/productions/examples/sandbox/frameing/players/sandbox.rb +3 -0
  114. data/productions/examples/sandbox/frameing/props.rb +3 -0
  115. data/productions/examples/sandbox/frameing/styles.rb +3 -0
  116. data/productions/examples/sandbox/gradients/players/spinner.rb +1 -1
  117. data/productions/examples/sandbox/gradients/players/teaser.rb +1 -1
  118. data/productions/examples/sandbox/gradients/players/wave.rb +1 -1
  119. data/productions/examples/sandbox/gradients/players/waves.rb +1 -1
  120. data/productions/examples/sandbox/gradients/props.rb +1 -1
  121. data/productions/examples/sandbox/gradients/styles.rb +1 -1
  122. data/productions/examples/sandbox/header.rb +4 -1
  123. data/productions/examples/sandbox/homer/players/homer.rb +1 -1
  124. data/productions/examples/sandbox/homer/props.rb +1 -1
  125. data/productions/examples/sandbox/homer/styles.rb +2 -2
  126. data/productions/examples/sandbox/images/space.png +0 -0
  127. data/productions/examples/sandbox/images_scene/props.rb +3 -0
  128. data/productions/examples/sandbox/images_scene/styles.rb +3 -0
  129. data/productions/examples/sandbox/inputs/players/button_input.rb +1 -1
  130. data/productions/examples/sandbox/inputs/players/check_box_input.rb +1 -1
  131. data/productions/examples/sandbox/inputs/players/combo_box_input.rb +1 -1
  132. data/productions/examples/sandbox/inputs/players/radio_button_input.rb +1 -1
  133. data/productions/examples/sandbox/inputs/players/text_area_input.rb +1 -1
  134. data/productions/examples/sandbox/inputs/players/text_box_input.rb +1 -1
  135. data/productions/examples/sandbox/inputs/props.rb +1 -1
  136. data/productions/examples/sandbox/inputs/styles.rb +1 -1
  137. data/productions/examples/sandbox/kiosk/players/kiosk.rb +36 -0
  138. data/productions/examples/sandbox/kiosk/props.rb +6 -0
  139. data/productions/examples/sandbox/kiosk/styles.rb +34 -0
  140. data/productions/examples/sandbox/players/sandbox.rb +1 -1
  141. data/productions/examples/sandbox/rounded_corners/players/box.rb +1 -1
  142. data/productions/examples/sandbox/rounded_corners/props.rb +1 -1
  143. data/productions/examples/sandbox/rounded_corners/styles.rb +1 -1
  144. data/productions/examples/sandbox/scrolling/players/add_button.rb +1 -1
  145. data/productions/examples/sandbox/scrolling/players/cell.rb +1 -1
  146. data/productions/examples/sandbox/scrolling/props.rb +1 -1
  147. data/productions/examples/sandbox/scrolling/styles.rb +1 -1
  148. data/productions/examples/sandbox/sketching/players/sketchpad.rb +1 -1
  149. data/productions/examples/sandbox/sketching/props.rb +1 -1
  150. data/productions/examples/sandbox/sketching/styles.rb +1 -1
  151. data/productions/examples/sandbox/sounds/players/clip.rb +1 -1
  152. data/productions/examples/sandbox/sounds/props.rb +1 -1
  153. data/productions/examples/sandbox/sounds/styles.rb +1 -1
  154. data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +13 -0
  155. data/productions/examples/sandbox/stages.rb +2 -1
  156. data/productions/examples/sandbox/styles.rb +1 -1
  157. data/productions/examples/sandbox/teaser/players/fader.rb +1 -1
  158. data/productions/examples/sandbox/teaser/props.rb +1 -1
  159. data/productions/examples/sandbox/teaser/styles.rb +1 -1
  160. data/productions/examples/tutorials/tutorial_1/players/sample.rb +1 -1
  161. data/productions/examples/tutorials/tutorial_1/props.rb +1 -1
  162. data/productions/examples/tutorials/tutorial_1/styles.rb +1 -1
  163. data/productions/stage_composer/init.rb +1 -1
  164. data/productions/stage_composer/inspector/players/inspector.rb +1 -1
  165. data/productions/stage_composer/inspector/players/prop_row.rb +1 -1
  166. data/productions/stage_composer/inspector/players/prop_tree.rb +1 -1
  167. data/productions/stage_composer/inspector/players/style_table.rb +1 -1
  168. data/productions/stage_composer/inspector/players/style_value.rb +1 -1
  169. data/productions/stage_composer/inspector/props.rb +1 -1
  170. data/productions/stage_composer/inspector/styles.rb +1 -1
  171. data/productions/stage_composer/lib/init.rb +1 -1
  172. data/productions/stage_composer/lib/limelight/composer/controller.rb +1 -1
  173. data/productions/stage_composer/lib/limelight/composer/lethargy.rb +1 -1
  174. data/productions/stage_composer/production.rb +1 -1
  175. data/productions/stage_composer/stages.rb +1 -1
  176. data/productions/startup/production.rb +49 -0
  177. data/productions/startup/spec/default_scene/default_scene_spec.rb +13 -0
  178. data/productions/startup/spec/spec_helper.rb +5 -0
  179. data/productions/startup/stages.rb +5 -2
  180. data/productions/startup/styles.rb +12 -0
  181. data/productions/startup/welcome/players/browse_button.rb +1 -1
  182. data/productions/startup/welcome/players/download_button.rb +1 -1
  183. data/productions/startup/welcome/players/sandbox_button.rb +1 -1
  184. data/productions/startup/welcome/props.rb +2 -2
  185. data/productions/startup/welcome/styles.rb +1 -1
  186. data/spec/builtin/players/button_spec.rb +1 -1
  187. data/spec/builtin/players/check_box_spec.rb +1 -1
  188. data/spec/builtin/players/combo_box_spec.rb +1 -1
  189. data/spec/builtin/players/image_spec.rb +3 -0
  190. data/spec/builtin/players/password_box_spec.rb +1 -1
  191. data/spec/builtin/players/radio_button_spec.rb +7 -7
  192. data/spec/builtin/players/text_area_spec.rb +1 -1
  193. data/spec/builtin/players/text_box_spec.rb +1 -1
  194. data/spec/builtin/utilities_production/spec_helper.rb +4 -0
  195. data/spec/builtin/utilities_production/utilities_production_spec.rb +143 -0
  196. data/spec/casting_director_spec.rb +7 -7
  197. data/spec/client/playbills_spec.rb +3 -0
  198. data/spec/commands/command_spec.rb +9 -1
  199. data/spec/commands/create_command_spec.rb +35 -5
  200. data/spec/commands/freeze_command_spec.rb +3 -0
  201. data/spec/commands/help_command_spec.rb +6 -3
  202. data/spec/commands/open_command_spec.rb +24 -2
  203. data/spec/commands/pack_command_spec.rb +3 -0
  204. data/spec/commands/unpack_command_spec.rb +4 -1
  205. data/spec/data_spec.rb +5 -16
  206. data/spec/dsl/production_builder_spec.rb +1 -1
  207. data/spec/dsl/prop_builder_spec.rb +19 -19
  208. data/spec/dsl/stage_builder_spec.rb +1 -1
  209. data/spec/dsl/styles_builder_spec.rb +1 -1
  210. data/spec/file_chooser_spec.rb +1 -1
  211. data/spec/file_filter_spec.rb +1 -1
  212. data/spec/file_loader_spec.rb +1 -1
  213. data/spec/gems_spec.rb +3 -0
  214. data/spec/java_util_spec.rb +1 -1
  215. data/spec/main_spec.rb +4 -1
  216. data/spec/paint_action_spec.rb +1 -1
  217. data/spec/pen_spec.rb +1 -1
  218. data/spec/producer_spec.rb +73 -32
  219. data/spec/production_spec.rb +23 -44
  220. data/spec/prop_spec.rb +102 -64
  221. data/spec/scene_spec.rb +3 -3
  222. data/spec/spec_helper.rb +3 -2
  223. data/spec/stage_spec.rb +172 -36
  224. data/spec/string_spec.rb +3 -0
  225. data/spec/studio_spec.rb +131 -3
  226. data/spec/styles_spec.rb +3 -0
  227. data/spec/templates/production_templater_spec.rb +12 -1
  228. data/spec/templates/scene_templater_spec.rb +17 -2
  229. data/spec/templates/templater_logger_spec.rb +3 -0
  230. data/spec/templates/templater_spec.rb +3 -0
  231. data/spec/theater_spec.rb +16 -1
  232. data/spec/util/downloader_spec.rb +3 -0
  233. metadata +56 -6
  234. data/lib/i4jruntime.jar +0 -0
  235. data/lib/junit-4.4.jar +0 -0
@@ -1,58 +1,85 @@
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
+
1
4
  require 'spec'
2
5
  require File.expand_path(File.dirname(__FILE__) + "/../../init")
3
6
  require 'limelight/scene'
4
7
  require 'limelight/producer'
5
8
 
6
- $producer = nil
7
- $with_ui = true
9
+ module Limelight
10
+ module Specs
11
+
12
+ class << self
13
+ attr_accessor :producer
14
+ end
15
+
16
+ module SpecHelper
17
+
18
+ def open_scene
19
+ if @ll_spec_options[:stage]
20
+ stage = producer.theater[@ll_spec_options[:stage]]
21
+ raise "No such stage: '#{@ll_spec_options[:stage]}'" unless stage
22
+ else
23
+ stage = producer.theater.default_stage
24
+ end
25
+
26
+ stage.should_remain_hidden = @ll_spec_options[:hidden]
27
+
28
+ @scene = producer.open_scene(@scene_name.to_s, stage)
29
+ end
30
+
31
+ def scene
32
+ open_scene unless @scene
33
+ return @scene
34
+ end
35
+
36
+ end
37
+ end
38
+ end
8
39
 
9
40
  module Spec
10
41
  module Example
11
42
  class ExampleGroup
12
43
 
13
- def self.uses_scene(scene_name)
44
+ def self.uses_scene(scene_name, options = {})
45
+ include Limelight::Specs::SpecHelper
46
+
14
47
  before(:each) do
15
- @scene = producer.open_scene(scene_name.to_s, producer.theater["default"])
48
+ @scene_name = scene_name
49
+ @ll_spec_options = options
50
+ @scene = nil
16
51
  end
17
-
18
- attr_reader :scene
19
52
  end
20
53
 
21
54
  after(:suite) do
22
- $producer.theater.stages.each { |stage| stage.close } unless $producer.nil?
55
+ unless Limelight::Specs.producer.nil?
56
+ Limelight::Specs.producer.theater.stages.each do |stage|
57
+ # MDM - We do this in a round-about way to reduce the chance of using stubbed or mocked methods.
58
+ frame = stage.instance_variable_get("@frame")
59
+ frame.close if frame
60
+ end
61
+ end
23
62
  end
24
63
 
25
64
  def producer
26
- if $producer.nil?
65
+ if Limelight::Specs.producer.nil?
27
66
  if $with_ui
28
67
  Limelight::Main.initializeContext
29
68
  else
30
69
  Limelight::Main.initializeTestContext
31
70
  end
32
- $producer = Limelight::Producer.new($PRODUCTION_PATH)
33
- $producer.load
71
+ raise "$PRODUCTION_PATH undefined. Make sure you specify the location of the production in $PRODUCTION_PATH." unless defined?($PRODUCTION_PATH)
72
+ raise "Could not find production: '#{$PRODUCTION_PATH}'. Check $PRODUCTION_PATH." unless File.exists?($PRODUCTION_PATH)
73
+ Limelight::Specs.producer = Limelight::Producer.new($PRODUCTION_PATH)
74
+ Limelight::Specs.producer.load
34
75
  end
35
- return $producer
76
+ return Limelight::Specs.producer
36
77
  end
37
78
 
38
- end
39
- end
40
- end
41
-
42
- if !$with_ui
43
- module Limelight
44
- module UI
45
- module Model
46
-
47
- class Frame
48
-
49
- def open
50
-
51
- end
52
-
53
- end
54
-
79
+ def production
80
+ return producer.production
55
81
  end
82
+
56
83
  end
57
84
  end
58
85
  end
@@ -1,7 +1,7 @@
1
- #- Copyright 2008 8th Light, Inc. All Rights Reserved.
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
- require 'limelight/dsl/menu_bar'
4
+ #require 'limelight/dsl/menu_bar'
5
5
  require 'limelight/file_chooser'
6
6
  require 'limelight/util'
7
7
 
@@ -15,17 +15,20 @@ module Limelight
15
15
  class Stage
16
16
  attr_accessor :default_scene
17
17
  attr_reader :frame, :current_scene, :name, :theater
18
-
18
+
19
+ attr_accessor :should_remain_hidden #:nodoc:
20
+
19
21
  include UI::Api::Stage
20
22
 
21
23
  # To create a new Stage, it be given a Theater to which it belongs, and the name is optional. If no name is provided
22
24
  # it will default to 'default'. A stage name must be unique, so it is recommended you provide a name.
23
25
  #
24
- def initialize(theater, name="default")
26
+ def initialize(theater, name, options = {})
25
27
  @theater = theater
26
28
  @name = name
27
29
  build_frame
28
30
  self.title = @name
31
+ apply_options(options)
29
32
  end
30
33
 
31
34
  # Returns the title that is displayed at the top of the window that this stage represents.
@@ -40,36 +43,142 @@ module Limelight
40
43
  @frame.title = value
41
44
  end
42
45
 
43
- # Returns the width and height of the Stage.
46
+ # Returns the width and height styles of the Stage.
44
47
  #
45
48
  # width, height = stage.size
46
49
  #
47
50
  def size
48
- return @frame.width, @frame.height
51
+ return @frame.width_style.to_s, @frame.height_style.to_s
49
52
  end
50
53
 
51
- # Sets the width and height of the Stage. The dimensions are passed in as an array.
54
+ # Sets the width and height styles of the Stage.
52
55
  #
53
56
  # state.size = [100, 200]
57
+ # state.size = ["50%", "100%"] # consuming 50% of the width and 100% of the height of the screen
54
58
  #
55
- def size=(values)
56
- @frame.set_size(values[0], values[1])
59
+ def size=(*values)
60
+ values = values[0] if values.size == 1 && values[0].is_a?(Array)
61
+ @frame.set_size_styles(values[0], values[1])
57
62
  end
58
63
 
59
- # The location of the Stage on the screen.
64
+ # The location styles of the Stage.
60
65
  #
61
66
  # x, y = stage.location
62
67
  #
63
68
  def location
64
- return @frame.location.x, @frame.location.y
69
+ return @frame.getXLocationStyle.to_s, @frame.getYLocationStyle.to_s
65
70
  end
66
71
 
67
- # Sets the location of the Stage on the screen.
72
+ # Sets the location styles of the Stage.
68
73
  #
69
74
  # stage.location = [500, 200]
70
75
  #
71
- def location= values
72
- @frame.set_location(values[0], values[1])
76
+ def location=(*values)
77
+ values = values[0] if values.size == 1 && values[0].is_a?(Array)
78
+ @frame.set_location_styles(values[0], values[1])
79
+ end
80
+
81
+ # Turns fullscreen mode on and off. In fullscreen mode, the stage will fill the entire screen and appear on top
82
+ # of all other windows.
83
+ #
84
+ # stage.fullscreen = true
85
+ #
86
+
87
+ def fullscreen=(on)
88
+ @frame.setFullScreen(on)
89
+ end
90
+
91
+ # Returns true if the stage is in fullscreen mode.
92
+ #
93
+ def fullscreen?
94
+ return @frame.isFullScreen()
95
+ end
96
+
97
+ # Turns kiosk mode for this stage on and off. When on, the stage will:
98
+ # * be fullscreen
99
+ # * not be frames
100
+ # * disable OS key commands
101
+ # * OS X: Cmd-Tab, Cmd-Alt-Esc, etc...
102
+ # * Windows: Alt-Tab, Ctrl-Esc, etc... (Ctrl-Alt-Del must be disabled through a registry entry)
103
+ #
104
+ # stage.kiosk = true
105
+ #
106
+ def kiosk=(on)
107
+ @frame.setKiosk(on)
108
+ end
109
+
110
+ # Return true if the stage is in kiosk mode.
111
+ #
112
+ def kiosk?
113
+ return @frame.isKiosk()
114
+ end
115
+
116
+
117
+ # Hides the stage so that it is not visible on the screen without destroying it.
118
+ #
119
+ def hide
120
+ @frame.visible = false
121
+ end
122
+
123
+ # Shows the stage after having hiding it.
124
+ #
125
+ def show
126
+ @frame.visible = true unless @should_remain_hidden
127
+ end
128
+
129
+ # Returns true if the stage is visible on the screen.
130
+ #
131
+ def visible?
132
+ return @frame.visible
133
+ end
134
+
135
+ # Sets the background color of the stage
136
+ #
137
+ def background_color=(value)
138
+ @frame.background_color = value.to_s
139
+ end
140
+
141
+ # Returns the background color of the stage in the format #RRGGBB(AA)
142
+ #
143
+ def background_color
144
+ return @frame.background_color
145
+ end
146
+
147
+ # When true, the stage will be frame with the operating system's standard window frame including close, minimize,
148
+ # and maximize buttons
149
+ #
150
+ def framed=(value)
151
+ @frame.setUndecorated(!value)
152
+ end
153
+
154
+ # Return true if the stage is framed.
155
+ #
156
+ def framed?
157
+ return !@frame.isUndecorated()
158
+ end
159
+
160
+ # When true, the stage will remain on top of all other windows.
161
+ #
162
+ def always_on_top=(value)
163
+ @frame.always_on_top = value
164
+ end
165
+
166
+ # Return true if the stage has been set to always be on top.
167
+ #
168
+ def always_on_top?
169
+ return @frame.always_on_top
170
+ end
171
+
172
+ # Sets the vitality of the stage. Limelight will not exit while vital frames remain visible.
173
+ #
174
+ def vital=(value)
175
+ @frame.vital = value
176
+ end
177
+
178
+ # Returns true if this is a vital stage. Limelight will not exit while vital frames remain visible.
179
+ #
180
+ def vital?
181
+ return @frame.vital?
73
182
  end
74
183
 
75
184
  # Opens the Stage and loads the provided Scene.
@@ -77,9 +186,10 @@ module Limelight
77
186
  # See load_scene
78
187
  #
79
188
  def open(scene)
189
+ scene.stage = self
80
190
  scene.illuminate
81
191
  load_scene(scene)
82
- @frame.open
192
+ @frame.open unless @should_remain_hidden
83
193
  scene.visible = true
84
194
  scene.scene_opened(self)
85
195
  end
@@ -87,18 +197,19 @@ module Limelight
87
197
  # Closes the Stage. It's window will no longer be displayed on the screen.
88
198
  #
89
199
  def close
200
+ @theater.stage_closed(self)
90
201
  @frame.close
202
+ @current_scene.visible = false if @current_scene
203
+ @current_scene = nil
91
204
  end
92
205
 
93
206
  # Loads a scene on the Stage. If the Stage is currently hosting a Scene, the original Scene will be removed and
94
207
  # the new Scene will replace it.
95
208
  #
96
209
  def load_scene(scene)
97
- @frame.setJMenuBar(scene.menu_bar)
210
+ # @frame.setJMenuBar(scene.menu_bar)
98
211
  @frame.load(scene.panel)
99
- scene.stage = self
100
- # scene.panel.snap_to_size # What's this for?
101
- if(has_static_size?(scene.style))
212
+ if (has_static_size?(scene.style))
102
213
  @frame.set_size(scene.style.compiled_width.value + @frame.getHorizontalInsetWidth, scene.style.compiled_height.value + @frame.getVerticalInsetWidth)
103
214
  end
104
215
  @current_scene = scene
@@ -120,7 +231,27 @@ module Limelight
120
231
  # Pops up a simple modal dialog with the provided message.
121
232
  #
122
233
  def alert(message)
123
- frame.alert(message)
234
+ Thread.new do
235
+ begin
236
+ Studio.utilities_production.alert(message)
237
+ rescue StandardError => e
238
+ puts "Error on alert: #{e}"
239
+ end
240
+ end
241
+ end
242
+
243
+ # Called when the user or system would like to close the stage. The stage will return true, allowing it to be
244
+ # closed, unless the current_scene defines the allow_close? method in which case the decision it left up to the
245
+ # current_scene.
246
+ #
247
+ def should_allow_close
248
+ return true if @current_scene.nil?
249
+ return true if !@current_scene.respond_to?(:allow_close?)
250
+ return @current_scene.allow_close?
251
+ end
252
+
253
+ def stub_current_scene(scene) #:nodoc:
254
+ @current_scene = scene
124
255
  end
125
256
 
126
257
  protected #############################################
@@ -130,7 +261,7 @@ module Limelight
130
261
  end
131
262
 
132
263
  private ###############################################
133
-
264
+
134
265
  def build_frame
135
266
  @frame = new_frame
136
267
  @frame.set_size(800, 800)
@@ -145,8 +276,17 @@ module Limelight
145
276
  def is_static?(value)
146
277
  return !(value.to_s.include?("%")) && !(value.to_s == "auto")
147
278
  end
148
-
279
+
280
+ def apply_options(options)
281
+ options.each_pair do |key, value|
282
+ setter_sym = "#{key.to_s}=".to_sym
283
+ if self.respond_to?(setter_sym)
284
+ self.send(setter_sym, value)
285
+ end
286
+ end
287
+ end
288
+
149
289
  end
150
-
290
+
151
291
  end
152
292
 
@@ -1,3 +1,6 @@
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
+
1
4
  class String
2
5
 
3
6
  # Converts Ruby style names to Java style camal case.
@@ -1,29 +1,166 @@
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
+
1
4
  require 'limelight/producer'
2
5
 
3
6
  module Limelight
4
7
 
8
+ # A Studio creates Productions. There is only one instance of Studio per Limelight runtime. All open productions
9
+ # are opened by the studio.
10
+ #
5
11
  class Studio
6
12
 
7
13
  include Limelight::UI::Api::Studio
8
14
 
9
15
  class << self
10
16
 
11
- def install
12
- Context.instance.studio = instance
17
+ def install #:nodoc:
18
+ Context.instance.studio = instance
13
19
  end
14
20
 
15
- def instance
21
+ def instance #:nodoc:
16
22
  @studio = self.new if @studio.nil?
17
23
  return @studio
18
24
  end
19
25
 
26
+ def index(production) #:nodoc:
27
+ @index = [] if @index.nil?
28
+ if name_taken?(production.name)
29
+ assign_unique_name(production)
30
+ elsif production.name.nil?
31
+ assign_name_to(production)
32
+ else
33
+ error_if_duplicate_name(production.name)
34
+ end
35
+ @index << production
36
+ end
37
+
38
+ # Returns the production with the specified name that was previously opened but the Studio.
39
+ #
40
+ def [](name)
41
+ return nil if @index.nil?
42
+ return @index.find { |production| production.name == name }
43
+ end
44
+
45
+ def name_taken?(name) #:nodoc:
46
+ return self[name] != nil
47
+ end
48
+
49
+ def reset #:nodoc:
50
+ @index = []
51
+ @is_shutdown = false
52
+ @is_shutting_down = false
53
+ @studio = nil
54
+ end
55
+
56
+ def error_if_duplicate_name(name) #:nodoc:
57
+ raise Limelight::LimelightException.new("Production name '#{name}' is already taken") if name_taken?(name)
58
+ end
59
+
60
+ # Opens the production at the specified path.
61
+ #
62
+ def open(production_path)
63
+ begin
64
+ producer = Producer.new(production_path)
65
+ production = producer.production
66
+ index(production)
67
+ producer.open
68
+ return production
69
+ rescue Exception => e
70
+ # TODO MDM - open the error in a window
71
+ puts e
72
+ puts e.backtrace
73
+ end
74
+ end
75
+
76
+ # Returns true if all of the open productions allow closing.
77
+ #
78
+ def should_allow_shutdown
79
+ return true if @index.nil?
80
+ return @index.all? { |production| production.allow_close? }
81
+ end
82
+
83
+ # If allowed (should_allow_shutdown), this will close all open productions and shutdown the limelight runtime.
84
+ #
85
+ def shutdown
86
+ return if @is_shutdown || @is_shutting_down
87
+ return unless should_allow_shutdown
88
+ @is_shutting_down = true
89
+ @index.each { |production| production.close }
90
+ @utilities_production.close if @utilities_production
91
+ @is_shutdown = true
92
+ Thread.new { Context.instance().shutdown }
93
+ end
94
+
95
+ # Called when a production is closed to notify the studio of the event.
96
+ #
97
+ def production_closed(production)
98
+ @index.delete(production)
99
+ shutdown if(@index.empty?)
100
+ end
101
+
102
+ # Returns an array of all the productions
103
+ #
104
+ def productions
105
+ return @index.nil? ? [] : @index.dup
106
+ end
107
+
108
+ # Publish the Studio, using DRb, on the specified port.
109
+ #
110
+ def publish_on_drb(port)
111
+ @drb_server = DRb.start_service("druby://0.0.0.0:#{port}", self)
112
+ end
113
+
114
+ # Returns the utilities production; a production used by limelight.
115
+ #
116
+ def utilities_production
117
+ if @utilities_production == nil
118
+ producer = Producer.new(File.join($LIMELIGHT_LIB, "limelight", "builtin", "utilities_production"))
119
+ @utilities_production = producer.production
120
+ producer.open
121
+ end
122
+ return @utilities_production
123
+ end
124
+
125
+ private #############################################
126
+
127
+ def assign_unique_name(production) #:nodoc:
128
+ count = 2
129
+ name = production.name
130
+ while name_taken?(name)
131
+ name = "#{production.name}_#{count}"
132
+ count += 1
133
+ end
134
+ production.name = name
135
+ end
136
+
137
+ def assign_name_to(production) #:nodoc:
138
+ count = @index.length + 1
139
+ while name_taken?(count.to_s)
140
+ count += 1
141
+ end
142
+ production.name = count.to_s
143
+ end
144
+
145
+ end
146
+
147
+ # Same as the class level method.
148
+ #
149
+ def open(production_path)
150
+ self.class.open(production_path)
20
151
  end
21
152
 
22
- def open(production)
23
- producer = Producer.new(production)
24
- producer.open
153
+ # Same as the class level method.
154
+ #
155
+ def should_allow_shutdown
156
+ return self.class.should_allow_shutdown
25
157
  end
26
158
 
159
+ # Same as the class level method.
160
+ #
161
+ def shutdown
162
+ self.class.shutdown()
163
+ end
27
164
  end
28
165
 
29
166
  end
@@ -1,4 +1,4 @@
1
- #- Copyright 2008 8th Light, Inc. All Rights Reserved.
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
4
  module Limelight
@@ -329,6 +329,19 @@ module Limelight
329
329
  # style.y = <value>
330
330
  #
331
331
  Y = Limelight::Styles::Style::STYLE_LIST.get(53)
332
+
333
+ # Specifies the starting X coordinate of background images.
334
+ #
335
+ # style.background_image_x = <value>
336
+ #
337
+ BackgroundImageX = Limelight::Styles::Style::STYLE_LIST.get(54)
338
+
339
+ # Specifies the Y of a prop.
340
+ #
341
+ # style.background_images_y = <value>
342
+ #
343
+ BackgroundImageY = Limelight::Styles::Style::STYLE_LIST.get(55)
344
+
332
345
  end
333
346
 
334
347
  end
@@ -1,5 +1,9 @@
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
+
1
4
  require 'limelight/templates/templater'
2
5
  require 'limelight/string'
6
+ require 'limelight/version'
3
7
 
4
8
  module Limelight
5
9
  module Templates
@@ -9,7 +13,6 @@ module Limelight
9
13
  #
10
14
  # creating directory: ./love_story
11
15
  # creating file: ./love_story/production.rb
12
- # creating file: ./love_story/init.rb
13
16
  # creating file: ./love_story/stages.rb
14
17
  # creating file: ./love_story/styles.rb
15
18
  #
@@ -25,15 +28,16 @@ module Limelight
25
28
  @tokens = {}
26
29
  @tokens[:DEFAULT_SCENE_NAME] = default_scene_name
27
30
  @tokens[:PRODUCTION_NAME] = File.basename(production_path).titleized
31
+ @tokens[:CURRENT_VERSION] = Limelight::VERSION::STRING
28
32
  end
29
33
 
30
34
  # Generates the files
31
35
  #
32
36
  def generate
33
37
  file(File.join(@production_path, "production.rb"), "production/production.rb.template", @tokens)
34
- file(File.join(@production_path, "init.rb"), "production/init.rb.template", @tokens)
35
38
  file(File.join(@production_path, "stages.rb"), "production/stages.rb.template", @tokens)
36
39
  file(File.join(@production_path, "styles.rb"), "production/styles.rb.template", @tokens)
40
+ file(File.join(@production_path, "spec", "spec_helper.rb"), "production/spec/spec_helper.rb.template", @tokens)
37
41
  end
38
42
 
39
43
  end
@@ -1,3 +1,6 @@
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
+
1
4
  require 'limelight/templates/templater'
2
5
  require 'limelight/string'
3
6
 
@@ -18,21 +21,23 @@ module Limelight
18
21
 
19
22
  # The scene_path should be path to a desired scene inside a production directory.
20
23
  #
21
- def initialize(scene_path)
22
- super(File.dirname(scene_path), Templater.source_dir)
23
- @scene_path = File.basename(scene_path)
24
- scene_name = File.basename(scene_path)
24
+ def initialize(production_path, scene_path)
25
+ super(production_path, Templater.source_dir)
26
+ @production_path = production_path
27
+ @scene_path = scene_path
28
+ @scene_name = File.basename(scene_path)
25
29
  @tokens = {}
26
- @tokens[:SCENE_NAME] = scene_name
27
- @tokens[:SCENE_TITLE] = scene_name.titleized
30
+ @tokens[:SCENE_NAME] = @scene_name
31
+ @tokens[:SCENE_TITLE] = @scene_name.titleized
28
32
  end
29
33
 
30
- # Generated the files
34
+ # Generates the files
31
35
  #
32
36
  def generate
33
37
  file(File.join(@scene_path, "props.rb"), "scene/props.rb.template", @tokens)
34
38
  file(File.join(@scene_path, "styles.rb"), "scene/styles.rb.template", @tokens)
35
39
  directory(File.join(@scene_path, "players"))
40
+ file(File.join("spec", @scene_path, "#{@scene_name}_spec.rb"), "scene_spec/scene_spec.rb.template", @tokens)
36
41
  end
37
42
 
38
43
  end