limelight 0.2.0-java → 0.2.1-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 (51) hide show
  1. data/bin/limelight +2 -3
  2. data/lib/limelight.jar +0 -0
  3. data/lib/limelight/animation.rb +32 -12
  4. data/lib/limelight/build_exception.rb +3 -0
  5. data/lib/limelight/builtin/players/button.rb +17 -2
  6. data/lib/limelight/builtin/players/check_box.rb +21 -2
  7. data/lib/limelight/builtin/players/combo_box.rb +31 -3
  8. data/lib/limelight/builtin/players/combo_box_popup_list.rb +1 -1
  9. data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +1 -1
  10. data/lib/limelight/builtin/players/curtains.rb +1 -1
  11. data/lib/limelight/builtin/players/radio_button.rb +27 -3
  12. data/lib/limelight/builtin/players/text_area.rb +11 -2
  13. data/lib/limelight/builtin/players/text_box.rb +11 -2
  14. data/lib/limelight/button_group_cache.rb +2 -2
  15. data/lib/limelight/casting_director.rb +6 -1
  16. data/lib/limelight/commands.rb +10 -24
  17. data/lib/limelight/file_chooser.rb +16 -3
  18. data/lib/limelight/file_filter.rb +10 -3
  19. data/lib/limelight/java_couplings.rb +11 -10
  20. data/lib/limelight/java_util.rb +36 -3
  21. data/lib/limelight/limelight_exception.rb +3 -1
  22. data/lib/limelight/loaders/file_scene_loader.rb +1 -1
  23. data/lib/limelight/main.rb +108 -0
  24. data/lib/limelight/menu_bar.rb +31 -12
  25. data/lib/limelight/paint_action.rb +4 -2
  26. data/lib/limelight/pen.rb +39 -9
  27. data/lib/limelight/producer.rb +35 -7
  28. data/lib/limelight/production.rb +18 -9
  29. data/lib/limelight/production_builder.rb +22 -5
  30. data/lib/limelight/prop.rb +127 -45
  31. data/lib/limelight/prop_builder.rb +70 -11
  32. data/lib/limelight/scene.rb +25 -21
  33. data/lib/limelight/stage.rb +68 -18
  34. data/lib/limelight/stage_builder.rb +68 -27
  35. data/lib/limelight/styles.rb +327 -30
  36. data/lib/limelight/styles_builder.rb +91 -21
  37. data/lib/limelight/theater.rb +23 -11
  38. data/lib/limelight/util.rb +28 -6
  39. data/lib/limelight/version.rb +1 -1
  40. data/productions/startup/players/browse_button.rb +1 -1
  41. data/spec/builtin/players/check_box_spec.rb +1 -1
  42. data/spec/builtin/players/radio_button_spec.rb +2 -2
  43. data/spec/builtin/players/text_area_spec.rb +1 -1
  44. data/spec/builtin/players/text_box_spec.rb +1 -1
  45. data/spec/commands_spec.rb +4 -3
  46. data/spec/prop_builder_spec.rb +40 -29
  47. data/spec/prop_spec.rb +5 -1
  48. data/spec/stage_spec.rb +15 -15
  49. data/spec/styles_spec.rb +36 -0
  50. data/spec/theater_spec.rb +8 -8
  51. metadata +6 -3
@@ -4,21 +4,63 @@
4
4
  require 'limelight/prop'
5
5
  require 'limelight/scene'
6
6
  require 'limelight/build_exception'
7
+ require 'limelight/util'
7
8
 
8
9
  module Limelight
9
-
10
+
11
+ # A trigger to build a Limelight::Scene using the PropBuilder DSL.
12
+ #
13
+ # See Limelight::PropBuilder
14
+ #
10
15
  def self.build_scene(options={}, &block)
11
16
  loader = options.delete(:build_loader)
12
17
  builder = SceneBuilder.new(options)
13
18
  builder.__loader__ = loader
14
- builder.instance_eval(&block) if block
19
+ builder.instance_eval(&block) if block
15
20
  return builder.__prop__
16
21
  end
17
-
18
- class PropBuilder
22
+
23
+ # The basis of the DSL for building Limelight::Prop objects.
24
+ #
25
+ # Sample usage:
26
+ #
27
+ # builder = Limelight::PropBuilder.new(a_prop)
28
+ # builder.instance_eval(&block)
29
+ #
30
+ # The prop passed into the constructor will be the root of the contructed Prop tree.
31
+ # The block passed into instance_eval contains the DSL for building props.
32
+ #
33
+ # Example block/DSL:
34
+ #
35
+ # parent :id => "the_parent" do
36
+ # child_one do
37
+ # grand_child_one :id => "gc_1", :styles => "grand_child"
38
+ # grand_child_two :id => "gc_2", :styles => "grand_child"
39
+ # end
40
+ # child_two
41
+ # end
42
+ #
43
+ # The above example will create a Limelight::Prop named 'parent' and add it to the root prop passed into the builder.
44
+ # The 'parent' prop will contain two props named 'child_one' and 'child_two'. 'child_one' will contain two props named
45
+ # 'grand_child_one' and 'grand_child_two'. 'child_two' has no child props nor do 'grand_child_one' or 'grand_child_two'.
46
+ #
47
+ # An options Hash may be passed into each prop. The key, value pairs in the hash will be used to set properties on the prop
48
+ # when it is added to a Limelight::Scene.
49
+ #
50
+ # See Limelight::Prop
51
+ #
52
+ class PropBuilder
53
+
54
+ Limelight::Util.lobotomize(self)
55
+
56
+ # Returns the root prop either passed in or created by this builder.
57
+ #
19
58
  attr_reader :__prop__
20
59
  attr_accessor :__loader__
21
-
60
+
61
+ # Creates a new builder. If a prop is passed it, it will be the root on which props are created.
62
+ # If the paramter is a Hash, the Hash will be used to construct a prop that will be used as the root.
63
+ #
22
64
  def initialize(options)
23
65
  if options.is_a?(Prop)
24
66
  @__prop__ = options
@@ -26,11 +68,27 @@ module Limelight
26
68
  @__prop__ = Prop.new(options)
27
69
  end
28
70
  end
29
-
71
+
72
+ # Add extra initialization options to the prop currently under construction.
73
+ #
74
+ # tree :id => "stump" do
75
+ # __ :height => "100%", :width => "30", :background_color => :brown
76
+ # branch :height => "100", :width => "20"
77
+ # branch do
78
+ # __ :height => "100", :width => "20"
79
+ # end
80
+ # end
81
+ #
82
+ # In the above example, the 'tree' prop has the following initialization options: id, height, width, background_color.
83
+ # The two 'branch' child props are identical.
84
+ #
30
85
  def __(options)
31
86
  @__prop__.add_options(options)
32
87
  end
33
-
88
+
89
+ # Installs props from another file using the prop DSL. The path will be relative to the
90
+ # root directory of the current production.
91
+ #
34
92
  def __install(file)
35
93
  raise "Cannot install external props because no loader was provided" if @__loader__.nil?
36
94
  raise "External prop file: '#{file}' doesn't exist" if !@__loader__.exists?(file)
@@ -41,8 +99,9 @@ module Limelight
41
99
  raise BuildException.new(file, content, e)
42
100
  end
43
101
  end
44
-
45
- def method_missing(sym, options={}, &prop)
102
+
103
+
104
+ def method_missing(sym, options={}, &prop) # :nodoc:
46
105
  options[:name] ||= sym.to_s
47
106
  builder = PropBuilder.new(options)
48
107
  builder.__loader__ = @__loader__
@@ -50,8 +109,8 @@ module Limelight
50
109
  @__prop__.add(builder.__prop__)
51
110
  end
52
111
  end
53
-
54
- class SceneBuilder < PropBuilder
112
+
113
+ class SceneBuilder < PropBuilder # :nodoc:
55
114
  def initialize(options)
56
115
  @__prop__ = Scene.new(options)
57
116
  end
@@ -6,6 +6,10 @@ require 'limelight/prop'
6
6
  require 'limelight/button_group_cache'
7
7
 
8
8
  module Limelight
9
+
10
+ # A Scene is a root Prop. Scenes may be loaded onto a Stage. In addition to being a Prop object, Scenes have a
11
+ # few extra attributes and behaviors.
12
+ #
9
13
  class Scene < Prop
10
14
 
11
15
  include UI::Api::Scene
@@ -23,32 +27,26 @@ module Limelight
23
27
  illuminate
24
28
  end
25
29
 
26
- def add_options(options)
30
+ def add_options(options) #:nodoc:
27
31
  @options = options
28
32
  illuminate
29
33
  end
30
-
31
- def illuminate
32
- @styles = @options.has_key?(:styles) ? @options.delete(:styles) : (@styles || {})
33
- @casting_director = @options.delete(:casting_director) if @options.has_key?(:casting_director)
34
- super
35
- end
36
-
37
- def has_static_size?
38
- return is_static?(style.get_width) && is_static?(style.get_height)
39
- end
40
-
34
+
35
+ # Creates the menu bar for the Scene
36
+ #
41
37
  def menu_bar
42
38
  return MenuBar.build(self) do
43
39
  menu("File") do
44
- item("Open", :open_chosen_scene)
40
+ item("Open", :open_chosen_production)
45
41
  item("Refresh", :reload)
46
42
  end
47
43
  end
48
44
  end
49
-
50
- def open_chosen_scene
51
- options = { :title => "Open New Limelight Scene", :description => "Limelight Production or Scene", :directory => @directory }
45
+
46
+ # Opens a FileChooser for a new Production. Loads the chosen Production.
47
+ #
48
+ def open_chosen_production
49
+ options = { :title => "Open New Limelight Production", :description => "Limelight Production", :directory => @directory }
52
50
  chosen_file = stage.choose_file(options) { |file| Util.is_limelight_scene?(file) || Util.is_limelight_production?(file) }
53
51
  if chosen_file
54
52
  @directory = File.dirname(chosen_file)
@@ -56,19 +54,25 @@ module Limelight
56
54
  end
57
55
  end
58
56
 
57
+ # Creates a new Producer to open the specified Production.
58
+ #
59
59
  def open_production(production_path)
60
60
  producer = Producer.new(production_path, @production.theater)
61
61
  producer.open
62
62
  end
63
-
64
- def load(path)
65
- @production.producer.open_scene(path, @stage)
63
+
64
+ # Opens the specified Scene on the Stage currently occupied by this Scene.s
65
+ #
66
+ def load(scene_name)
67
+ @production.producer.open_scene(scene_name, @stage)
66
68
  end
67
69
 
68
70
  private ###############################################
69
71
 
70
- def is_static?(value)
71
- return !(value.to_s.include?("%")) && !(value.to_s == "auto")
72
+ def illuminate
73
+ @styles = @options.has_key?(:styles) ? @options.delete(:styles) : (@styles || {})
74
+ @casting_director = @options.delete(:casting_director) if @options.has_key?(:casting_director)
75
+ super
72
76
  end
73
77
 
74
78
  def reload
@@ -8,76 +8,118 @@ require 'limelight/file_chooser'
8
8
  require 'limelight/util'
9
9
 
10
10
  module Limelight
11
-
11
+
12
+ # In the metephorical sense, a Stage is a platform which may hold a scene. In a more, to-the-point sence, a Stage
13
+ # represents a window on the computer screen. The Stage objects within a Production are configured by the StagesBuilder.
14
+ # By default a Production will have one Stage. A Stage may open any number of Scenes but it may only have one current
15
+ # scene loaded at a time.
16
+ #
12
17
  class Stage
13
18
  attr_accessor :default_scene
14
19
  attr_reader :frame, :current_scene, :name, :theater
15
20
 
16
21
  include UI::Api::Stage
17
-
18
- def public_choose_file
19
- choose_file
20
- end
21
-
22
+
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
24
+ # it will default to 'default'. A stage name must be unique, so it is recommended you provide a name.
25
+ #
22
26
  def initialize(theater, name="default")
23
27
  @theater = theater
24
28
  @name = name
25
29
  build_frame
26
30
  self.title = @name
27
31
  end
28
-
32
+
33
+ # Returns the title that is displayed at the top of the window that this stage represents.
34
+ #
29
35
  def title
30
36
  return @frame.title
31
37
  end
32
-
38
+
39
+ # Sets the title that is displayed at the top of the window that this stage represents.
40
+ #
33
41
  def title=(value)
34
42
  @frame.title = value
35
43
  end
36
-
44
+
45
+ # Returns the width and height of the Stage.
46
+ #
47
+ # width, height = stage.size
48
+ #
37
49
  def size
38
50
  return @frame.width, @frame.height
39
51
  end
40
-
52
+
53
+ # Sets the width and height of the Stage. The dimensions are passed in as an array.
54
+ #
55
+ # state.size = [100, 200]
56
+ #
41
57
  def size=(values)
42
58
  @frame.set_size(values[0], values[1])
43
59
  end
44
-
60
+
61
+ # The location of the Stage on the screen.
62
+ #
63
+ # x, y = stage.location
64
+ #
45
65
  def location
46
66
  return @frame.location.x, @frame.location.y
47
67
  end
48
-
68
+
69
+ # Sets the location of the Stage on the screen.
70
+ #
71
+ # stage.location = [500, 200]
72
+ #
49
73
  def location= values
50
74
  @frame.set_location(values[0], values[1])
51
75
  end
52
-
76
+
77
+ # Opens the Stage and loads the provided Scene.
78
+ #
79
+ # See load_scene
80
+ #
53
81
  def open(scene)
54
82
  load_scene(scene)
55
83
  @frame.open
56
84
  scene.visible = true
57
85
  scene.scene_opened(self)
58
86
  end
59
-
87
+
88
+ # Closes the Stage. It's window will no longer be displayed on the screen.
89
+ #
60
90
  def close
61
91
  @frame.close
62
92
  end
63
-
93
+
94
+ # Loads a scene on the Stage. If the Stage is currently hosting a Scene, the original Scene will be removed and
95
+ # the new Scene will replace it.
96
+ #
64
97
  def load_scene(scene)
65
98
  @frame.setJMenuBar(scene.menu_bar)
66
99
  @frame.load(scene.panel)
67
100
  scene.stage = self
68
101
  scene.panel.snap_to_size
69
- if(scene.has_static_size?)
70
- @frame.set_size(scene.panel.width, scene.panel.height)
102
+ if(has_static_size?(scene.style))
103
+ @frame.set_size(scene.panel.width + @frame.getHorizontalInsetWidth, scene.panel.height + @frame.getVerticalInsetWidth)
71
104
  end
72
105
  @current_scene = scene
73
106
  end
74
-
107
+
108
+ # Opens a file chooser window to select a file on the file system. Options may include:
109
+ # * :description => a string describing the desired file
110
+ # * :directory => starting directory
111
+ # * :title => title of the window
112
+ # * :directories_only => boolean, true if the user must select a directory
113
+ # * :files_only => boolean, true if the user must select a file
114
+ #
75
115
  def choose_file(options={}, &block)
76
116
  options[:parent] = @frame
77
117
  chooser = FileChooser.new(options, &block)
78
118
  return chooser.choose_file
79
119
  end
80
120
 
121
+ # Pops up a simple modal dialog with the provided message.
122
+ #
81
123
  def alert(message)
82
124
  frame.alert(message)
83
125
  end
@@ -90,6 +132,14 @@ module Limelight
90
132
  @frame.set_location(200, 25)
91
133
  @frame.title = title
92
134
  end
135
+
136
+ def has_static_size?(style)
137
+ return is_static?(style.get_width) && is_static?(style.get_height)
138
+ end
139
+
140
+ def is_static?(value)
141
+ return !(value.to_s.include?("%")) && !(value.to_s == "auto")
142
+ end
93
143
 
94
144
  end
95
145
 
@@ -5,58 +5,99 @@ require 'limelight/stage'
5
5
  require 'limelight/limelight_exception'
6
6
 
7
7
  module Limelight
8
-
8
+
9
+ # A trigger to build/configure Stage objects using the StageBuilder DSL.
10
+ #
11
+ # See Limelight::Stagesbuilder, Limelight::Stagebuilder
12
+ #
9
13
  def self.build_stages(theater, &block)
10
14
  builder = StagesBuilder.new(theater)
11
15
  builder.instance_eval(&block) if block
12
- return builder.stages
16
+ return builder.__stages__
13
17
  end
14
-
18
+
19
+ # The basis of the DSL for building Stage objects.
20
+ #
21
+ # stage "inspector" do
22
+ # default_scene "inspector"
23
+ # title "Limelight Composer Inspector"
24
+ # location [0, 0]
25
+ # size [300, 800]
26
+ # end
27
+ #
28
+ # stage "viewer" do
29
+ # title "Limelight Composer Viewer"
30
+ # location [350, 0]
31
+ # size [800, 800]
32
+ # end
33
+ #
34
+ # In this example above, two stages are created for the production. One is named 'inspector' and the other is named
35
+ # 'viewer'. 'inspector' has a default scene that will be loaded on startup. 'viewer' will not contain any scene
36
+ # on startup. Using the DSL, each stage can be configured to set the title, location, size, or any other attribute
37
+ # of a stage.
38
+ #
39
+ # See Limelight::Stage
40
+ #
15
41
  class StagesBuilder
16
-
17
- attr_reader :stages
18
-
42
+
43
+ Limelight::Util.lobotomize(self)
44
+
45
+ attr_reader :__stages__
46
+
47
+ # Constructs a new StagesBuilder. A Theater object is required as a parameter. Each stages created will belong
48
+ # to the Theater passed in.
49
+ #
19
50
  def initialize(theater)
20
- @theater = theater
21
- @stages = []
51
+ @__theater__ = theater
52
+ @__stages__ = []
22
53
  end
23
-
54
+
55
+ # Creates a new stage with the provided name. The block will contain StageBuilder DSL to configure the stage.
56
+ #
24
57
  def stage(name, &block)
25
- stage_builder = StageBuilder.new(@theater, name)
58
+ stage_builder = StageBuilder.new(@__theater__, name)
26
59
  stage_builder.instance_eval(&block) if block
27
- @stages << stage_builder.stage
60
+ @__stages__ << stage_builder.__stage__
28
61
  end
29
-
62
+
30
63
  end
31
-
64
+
65
+ # The basis of the DSL for configuring a Stage object.
66
+ #
32
67
  class StageBuilder
33
-
34
- attr_reader :stage
35
-
36
- def initialize(theater, name)
68
+
69
+ Limelight::Util.lobotomize(self)
70
+
71
+ attr_reader :__stage__
72
+
73
+ def initialize(theater, name) #:nodoc:
37
74
  if theater[name]
38
- @stage = theater[name]
75
+ @__stage__ = theater[name]
39
76
  else
40
- @stage = Stage.new(theater, name)
41
- theater.add_stage(@stage)
77
+ @__stage__ = Stage.new(theater, name)
78
+ theater.add_stage(@__stage__)
42
79
  end
43
80
  end
44
-
81
+
82
+ # Specifies the scene that will be displayed on the stage upon opening of the production.
83
+ #
45
84
  def default_scene(scene_name)
46
- @stage.default_scene = scene_name
85
+ @__stage__.default_scene = scene_name
47
86
  end
48
-
49
- def method_missing(sym, value)
87
+
88
+ def method_missing(sym, value) #:nodoc:
50
89
  setter_sym = "#{sym}=".to_s
51
- raise StageBuilderException.new(sym) if !@stage.respond_to?(setter_sym)
52
- @stage.send(setter_sym, value)
90
+ raise StageBuilderException.new(sym) if !@__stage__.respond_to?(setter_sym)
91
+ @__stage__.send(setter_sym, value)
53
92
  end
54
93
  end
55
94
 
95
+ # Exception thrown by StageBuilder in the event of an invalid configuration.
96
+ #
56
97
  class StageBuilderException < LimelightException
57
98
  def initialize(name)
58
99
  super("'#{name}' is not a valid stage property")
59
100
  end
60
101
  end
61
-
102
+
62
103
  end