limelight 0.0.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. data/bin/icons/icon.ico +0 -0
  2. data/bin/icons/icon_48.gif +0 -0
  3. data/bin/icons/limelight.icns +0 -0
  4. data/bin/icons/splash.png +0 -0
  5. data/bin/limelight +6 -0
  6. data/bin/ll +10 -0
  7. data/bin/ll.bat +5 -0
  8. data/lib/init.rb +11 -0
  9. data/lib/limelight/build_exception.rb +45 -0
  10. data/lib/limelight/button_group_cache.rb +11 -0
  11. data/lib/limelight/casting_director.rb +72 -0
  12. data/lib/limelight/commands.rb +66 -0
  13. data/lib/limelight/file_chooser.rb +55 -0
  14. data/lib/limelight/file_filter.rb +26 -0
  15. data/lib/limelight/java_util.rb +29 -0
  16. data/lib/limelight/limelight_exception.rb +9 -0
  17. data/lib/limelight/loaders/file_scene_loader.rb +48 -0
  18. data/lib/limelight/menu_bar.rb +49 -0
  19. data/lib/limelight/paint_action.rb +25 -0
  20. data/lib/limelight/pen.rb +53 -0
  21. data/lib/limelight/players/button.rb +29 -0
  22. data/lib/limelight/players/check_box.rb +38 -0
  23. data/lib/limelight/players/combo_box.rb +44 -0
  24. data/lib/limelight/players/radio_button.rb +47 -0
  25. data/lib/limelight/players/text_area.rb +25 -0
  26. data/lib/limelight/players/text_box.rb +25 -0
  27. data/lib/limelight/players.rb +9 -0
  28. data/lib/limelight/producer.rb +141 -0
  29. data/lib/limelight/production.rb +64 -0
  30. data/lib/limelight/production_builder.rb +49 -0
  31. data/lib/limelight/prop.rb +241 -0
  32. data/lib/limelight/prop_builder.rb +60 -0
  33. data/lib/limelight/scene.rb +75 -0
  34. data/lib/limelight/stage.rb +93 -0
  35. data/lib/limelight/stage_builder.rb +62 -0
  36. data/lib/limelight/styles.rb +37 -0
  37. data/lib/limelight/styles_builder.rb +61 -0
  38. data/lib/limelight/theater.rb +42 -0
  39. data/lib/limelight/util.rb +26 -0
  40. data/lib/limelight/version.rb +20 -0
  41. data/lib/limelight.jar +0 -0
  42. data/productions/examples/8thlight.com/about/about.txt +24 -0
  43. data/productions/examples/8thlight.com/about/props.rb +11 -0
  44. data/productions/examples/8thlight.com/about/styles.rb +2 -0
  45. data/productions/examples/8thlight.com/footer.rb +6 -0
  46. data/productions/examples/8thlight.com/home/props.rb +28 -0
  47. data/productions/examples/8thlight.com/home/styles.rb +2 -0
  48. data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
  49. data/productions/examples/8thlight.com/images/bg.jpg +0 -0
  50. data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
  51. data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
  52. data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
  53. data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
  54. data/productions/examples/8thlight.com/images/header.jpg +0 -0
  55. data/productions/examples/8thlight.com/images/moses.jpg +0 -0
  56. data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
  57. data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
  58. data/productions/examples/8thlight.com/menu.rb +11 -0
  59. data/productions/examples/8thlight.com/services/props.rb +11 -0
  60. data/productions/examples/8thlight.com/services/services.txt +8 -0
  61. data/productions/examples/8thlight.com/services/styles.rb +2 -0
  62. data/productions/examples/8thlight.com/stages.rb +8 -0
  63. data/productions/examples/8thlight.com/styles.rb +205 -0
  64. data/productions/examples/calculator/players/button.rb +24 -0
  65. data/productions/examples/calculator/players/calculator.rb +15 -0
  66. data/productions/examples/calculator/players/calculator_model.rb +13 -0
  67. data/productions/examples/calculator/props.rb +23 -0
  68. data/productions/examples/calculator/styles.rb +38 -0
  69. data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
  70. data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
  71. data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
  72. data/productions/examples/langstons_ant/players/ant.rb +103 -0
  73. data/productions/examples/langstons_ant/players/log.rb +29 -0
  74. data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
  75. data/productions/examples/langstons_ant/players/world.rb +61 -0
  76. data/productions/examples/langstons_ant/props.rb +22 -0
  77. data/productions/examples/langstons_ant/styles.rb +105 -0
  78. data/productions/examples/sandbox/click_me/players/chromaton.rb +47 -0
  79. data/productions/examples/sandbox/click_me/props.rb +8 -0
  80. data/productions/examples/sandbox/click_me/styles.rb +12 -0
  81. data/productions/examples/sandbox/floaters/players/floater.rb +92 -0
  82. data/productions/examples/sandbox/floaters/players/surface.rb +17 -0
  83. data/productions/examples/sandbox/floaters/props.rb +10 -0
  84. data/productions/examples/sandbox/floaters/styles.rb +25 -0
  85. data/productions/examples/sandbox/gradients/players/spinner.rb +23 -0
  86. data/productions/examples/sandbox/gradients/players/teaser.rb +26 -0
  87. data/productions/examples/sandbox/gradients/players/wave.rb +26 -0
  88. data/productions/examples/sandbox/gradients/players/waves.rb +26 -0
  89. data/productions/examples/sandbox/gradients/props.rb +13 -0
  90. data/productions/examples/sandbox/gradients/styles.rb +47 -0
  91. data/productions/examples/sandbox/header.rb +15 -0
  92. data/productions/examples/sandbox/homer/players/homer.rb +20 -0
  93. data/productions/examples/sandbox/homer/props.rb +10 -0
  94. data/productions/examples/sandbox/homer/styles.rb +17 -0
  95. data/productions/examples/sandbox/images/arch.jpg +0 -0
  96. data/productions/examples/sandbox/images/beach.jpg +0 -0
  97. data/productions/examples/sandbox/images/homer.jpg +0 -0
  98. data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
  99. data/productions/examples/sandbox/images/marilyn.jpg +0 -0
  100. data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
  101. data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
  102. data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
  103. data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
  104. data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
  105. data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
  106. data/productions/examples/sandbox/inputs/props.rb +40 -0
  107. data/productions/examples/sandbox/inputs/styles.rb +39 -0
  108. data/productions/examples/sandbox/players/sandbox.rb +11 -0
  109. data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
  110. data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
  111. data/productions/examples/sandbox/rounded_corners/styles.rb +18 -0
  112. data/productions/examples/sandbox/scrolling/players/cell.rb +16 -0
  113. data/productions/examples/sandbox/scrolling/props.rb +40 -0
  114. data/productions/examples/sandbox/scrolling/styles.rb +25 -0
  115. data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
  116. data/productions/examples/sandbox/sketching/props.rb +25 -0
  117. data/productions/examples/sandbox/sketching/styles.rb +36 -0
  118. data/productions/examples/sandbox/stages.rb +6 -0
  119. data/productions/examples/sandbox/styles.rb +37 -0
  120. data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
  121. data/productions/examples/sandbox/teaser/props.rb +14 -0
  122. data/productions/examples/sandbox/teaser/styles.rb +22 -0
  123. data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
  124. data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
  125. data/productions/examples/tutorials/tutorial_1/styles.rb +27 -0
  126. data/productions/stage_composer/init.rb +10 -0
  127. data/productions/stage_composer/inspector/players/inspector.rb +80 -0
  128. data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
  129. data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
  130. data/productions/stage_composer/inspector/players/style_table.rb +12 -0
  131. data/productions/stage_composer/inspector/players/style_value.rb +16 -0
  132. data/productions/stage_composer/inspector/props.rb +19 -0
  133. data/productions/stage_composer/inspector/styles.rb +71 -0
  134. data/productions/stage_composer/lib/init.rb +5 -0
  135. data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
  136. data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
  137. data/productions/stage_composer/production.rb +6 -0
  138. data/productions/stage_composer/stages.rb +15 -0
  139. data/productions/startup/props.rb +5 -0
  140. data/spec/casting_director_spec.rb +94 -0
  141. data/spec/commands_spec.rb +33 -0
  142. data/spec/file_chooser_spec.rb +64 -0
  143. data/spec/file_filter_spec.rb +29 -0
  144. data/spec/java_util_spec.rb +53 -0
  145. data/spec/loaders/file_loader_spec.rb +28 -0
  146. data/spec/paint_action_spec.rb +30 -0
  147. data/spec/pen_spec.rb +62 -0
  148. data/spec/players/button_spec.rb +31 -0
  149. data/spec/players/check_box_spec.rb +40 -0
  150. data/spec/players/combo_box_spec.rb +39 -0
  151. data/spec/players/radio_button_spec.rb +75 -0
  152. data/spec/players/text_area_spec.rb +37 -0
  153. data/spec/players/text_box_spec.rb +37 -0
  154. data/spec/producer_spec.rb +157 -0
  155. data/spec/production_builder_spec.rb +48 -0
  156. data/spec/production_spec.rb +75 -0
  157. data/spec/prop_builder_spec.rb +178 -0
  158. data/spec/prop_spec.rb +216 -0
  159. data/spec/scene_spec.rb +34 -0
  160. data/spec/spec_helper.rb +18 -0
  161. data/spec/stage_builder_spec.rb +90 -0
  162. data/spec/stage_spec.rb +57 -0
  163. data/spec/styles_builder_spec.rb +123 -0
  164. data/spec/theater_spec.rb +66 -0
  165. metadata +275 -0
Binary file
Binary file
Binary file
Binary file
data/bin/limelight ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env jruby
2
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/init")
3
+ require 'limelight/commands'
4
+
5
+ Limelight::Commands.run(ARGV)
6
+
data/bin/ll ADDED
@@ -0,0 +1,10 @@
1
+ #! /bin/bash
2
+
3
+ JAVA_OPTS=$JAVA_OPTS' -Dapple.laf.useScreenMenuBar=true '
4
+ JAVA_OPTS=$JAVA_OPTS' -Xdock:name=Limelight '
5
+ JAVA_OPTS=$JAVA_OPTS' -Dapple.awt.showGrowBox=true '
6
+ JAVA_OPTS=$JAVA_OPTS-Xdock:icon=$LIMELIGHT_HOME/bin/icons/limelight.icns
7
+
8
+ java -cp $LIMELIGHT_HOME/lib/limelight.jar:$LIMELIGHT_HOME/jruby/lib/jruby.jar $JAVA_OPTS -Dlimelight.home=$LIMELIGHT_HOME limelight.Main $1 $2 $3 $4 $5
9
+
10
+
data/bin/ll.bat ADDED
@@ -0,0 +1,5 @@
1
+ set LIMELIGHT_HOME=Y:\Projects\limelight\trunk
2
+
3
+ java -cp dist\limelight.jar;jruby\lib\jruby.jar %JAVA_OPTS% -Dlimelight.home=%LIMELIGHT_HOME% limelight.Main %1 %2 %3 %4 %5
4
+
5
+
data/lib/init.rb ADDED
@@ -0,0 +1,11 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ limelight_require_path = File.expand_path(File.dirname(__FILE__))
5
+ $: << limelight_require_path unless $:.include?(limelight_require_path)
6
+
7
+ require 'java'
8
+ require File.expand_path(File.dirname(__FILE__) + "/limelight.jar")
9
+
10
+ # ENV["GEM_HOME"] = ENV["GEM_PATH"] = File.expand_path(File.dirname(__FILE__) + "/../../jruby/lib/ruby/gems/1.8")
11
+ require 'rubygems'
@@ -0,0 +1,45 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+ class BuildException < Exception
6
+
7
+ attr_reader :filename, :line_number
8
+
9
+ def initialize(filename, file_contents, e)
10
+ @filename = filename
11
+ @file_contents = file_contents
12
+ @original_exception = e
13
+ @line_number = find_line_number
14
+ super(build_error_message)
15
+ set_backtrace(e.backtrace)
16
+ end
17
+
18
+ def find_line_number
19
+ lines = [@original_exception.message].concat @original_exception.backtrace
20
+ line_number = nil
21
+ lines.each do |line|
22
+ match = line.match(/\(eval\):(\d+):/)
23
+ if(match)
24
+ line_number = match[1].to_i
25
+ break
26
+ end
27
+ end
28
+ return line_number
29
+ end
30
+
31
+ def build_error_message
32
+ lines = @file_contents.split("\n")
33
+ start_line = @line_number - 4 < 0 ? 0 : @line_number - 4
34
+ end_line = @line_number + 2 >= lines.size ? lines.size - 1: @line_number + 2
35
+ message = "#{@filename}:#{@line_number}: #{@original_exception.message}"
36
+ message << "\n\t----- #{@filename} lines #{start_line + 1} - #{end_line + 1} -----"
37
+ (start_line..end_line).each do |i|
38
+ message << "\n\t#{i == @line_number - 1 ? "*": " "} #{i+1}: #{lines[i]}"
39
+ end
40
+ message << "\n"
41
+ return message
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,11 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+ ButtonGroupCache = Java::limelight.ui.ButtonGroupCache
6
+ class ButtonGroupCache
7
+ def [](key)
8
+ return self.get(key)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,72 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/players'
5
+
6
+ module Limelight
7
+
8
+ class CastingDirector
9
+
10
+ def initialize(loader)
11
+ @loader = loader
12
+ @known_players = {}
13
+ end
14
+
15
+ def fill_cast(prop)
16
+ cast_default_player(prop)
17
+ cast_additional_players(prop)
18
+ end
19
+
20
+ private ###############################################
21
+
22
+ def cast_default_player(prop)
23
+ return if prop.name.nil? || prop.name.empty?
24
+ prop.include_player(@known_players[prop.name]) if player_exists?(prop, prop.name)
25
+ end
26
+
27
+ def cast_additional_players(prop)
28
+ return if prop.players.nil? || prop.players.empty?
29
+ player_names = prop.players.split(/[ ,]/)
30
+ player_names.each do |player_name|
31
+ apply_player(prop, player_name)
32
+ end
33
+ end
34
+
35
+ def apply_player(prop, player_name)
36
+ prop.include_player(@known_players[player_name]) if player_exists?(prop, player_name)
37
+ end
38
+
39
+ def player_exists?(prop, player_name)
40
+ load_player_by_name(prop, player_name) if !@known_players.has_key?(player_name)
41
+ return @known_players[player_name] != :does_not_exist
42
+ end
43
+
44
+ def load_player_by_name(prop, player_name)
45
+ load_custom_player(prop, player_name)
46
+ load_builtin_player(player_name) if !@known_players.has_key?(player_name)
47
+ @known_players[player_name] = :does_not_exist if !@known_players.has_key?(player_name)
48
+ end
49
+
50
+ def load_custom_player(prop, player_name)
51
+ player_filename = File.join([prop.scene.path.to_s, "players", "#{player_name}.rb"])
52
+ return if !@loader.exists?(player_filename)
53
+
54
+ Kernel.load @loader.path_to(player_filename)
55
+
56
+ module_name = player_name.camalized
57
+ return if !Object.const_defined?(module_name)
58
+
59
+ mod = Object.const_get(module_name)
60
+ @known_players[player_name] = mod
61
+ end
62
+
63
+ def load_builtin_player(player_name)
64
+ module_name = player_name.camalized
65
+ return if !Limelight::Players.const_defined?(module_name)
66
+ mod = Limelight::Players.const_get(module_name)
67
+ @known_players[player_name] = mod
68
+ end
69
+
70
+ end
71
+
72
+ end
@@ -0,0 +1,66 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'optparse'
5
+
6
+ module Limelight
7
+
8
+ DEFAULT_PRODUCTION = File.expand_path(File.dirname(__FILE__) + "/../../productions/startup")
9
+
10
+ module Commands
11
+
12
+ class OpenProduction
13
+ def self.description
14
+ return "Open a limelight production or scene."
15
+ end
16
+
17
+ def run(args)
18
+ Java::limelight::Main.initialize_context
19
+ require 'limelight/producer'
20
+ production = args.length > 0 ? args[0] : DEFAULT_PRODUCTION
21
+ Limelight::Producer.open(production)
22
+ end
23
+ end
24
+
25
+ class PackProduction
26
+ def self.description
27
+ return "Pack the designated limelight production into a .llp file."
28
+ end
29
+
30
+ def run(args)
31
+ packer = Java::limelight::io::Packer.new
32
+ packer.pack(args.shift)
33
+ end
34
+ end
35
+
36
+ COMMANDS = {
37
+ "open" => OpenProduction,
38
+ "pack" => PackProduction
39
+ }
40
+
41
+ class << self
42
+ def run(args)
43
+ command_name = args.shift
44
+ command = COMMANDS[command_name]
45
+ if command
46
+ command.new.run(args)
47
+ else
48
+ usage
49
+ end
50
+ end
51
+
52
+ def usage
53
+ puts "Usage: limelight <command> [options] [params]"
54
+ puts "commands:"
55
+ COMMANDS.keys.sort.each do |key|
56
+ command = COMMANDS[key]
57
+ puts "\t#{key}\t\t#{command.description}"
58
+ end
59
+ end
60
+ end
61
+
62
+
63
+ end
64
+
65
+
66
+ end
@@ -0,0 +1,55 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/file_filter'
5
+
6
+ module Limelight
7
+
8
+ class FileChooser
9
+
10
+ attr_reader :chooser, :chosen_file
11
+
12
+ def initialize(options = {}, &filter)
13
+ @options = options
14
+ @parent = options[:parent]
15
+ create_chooser
16
+ @chooser.setFileFilter(FileFilter.new(@options[:description], &filter)) if filter
17
+ end
18
+
19
+ def choose_file
20
+ returnVal = @chooser.showOpenDialog(@parent);
21
+
22
+ if(returnVal == javax.swing.JFileChooser::APPROVE_OPTION)
23
+ @chosen_file = @chooser.getSelectedFile().absolute_path
24
+ else
25
+ @chosen_file = nil
26
+ end
27
+
28
+ return @chosen_file
29
+ end
30
+
31
+ private ###############################################
32
+
33
+ def create_chooser
34
+ if @options.has_key?(:directory)
35
+ @chooser = javax.swing.JFileChooser.new(@options[:directory])
36
+ else
37
+ @chooser = javax.swing.JFileChooser.new
38
+ end
39
+ configure_file_selection_mode
40
+ @chooser.setDialogTitle(@options[:title]) if @options[:title]
41
+ end
42
+
43
+ def configure_file_selection_mode
44
+ if(@options[:directories_only])
45
+ @chooser.setFileSelectionMode(javax.swing.JFileChooser::DIRECTORIES_ONLY)
46
+ elsif(@options[:files_only])
47
+ @chooser.setFileSelectionMode(javax.swing.JFileChooser::FILES_ONLY)
48
+ else
49
+ @chooser.setFileSelectionMode(javax.swing.JFileChooser::FILES_AND_DIRECTORIES)
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,26 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+
6
+ class FileFilter < javax.swing.filechooser::FileFilter
7
+
8
+ attr_reader :description, :filter
9
+
10
+ def initialize(description, &filter)
11
+ super()
12
+ @description = description
13
+ @filter = filter
14
+ end
15
+
16
+ def accept(file)
17
+ return @filter.call(file)
18
+ end
19
+
20
+ def getDescription
21
+ return @description
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,29 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ class Class
5
+
6
+ def getters(*symbols)
7
+ symbols.each do |symbol|
8
+ self.class_eval "def get#{symbol.to_s.camalized}; return #{symbol}; end"
9
+ end
10
+ end
11
+
12
+ def setters(*symbols)
13
+ symbols.each do |symbol|
14
+ self.class_eval "def set#{symbol.to_s.camalized}(value); self.#{symbol} = value; end"
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ class String
21
+
22
+ def camalized(starting_case = :upper)
23
+ value = self.downcase.gsub(/[_| ]([a-z])/) { |match| match[-1..-1].upcase }
24
+ value = value[0..0].upcase + value[1..-1] if starting_case == :upper
25
+ return value
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,9 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+
6
+ class LimelightException < Exception
7
+ end
8
+
9
+ end
@@ -0,0 +1,48 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+ module Loaders
6
+
7
+ class FileSceneLoader
8
+
9
+ include Java::limelight.SceneLoader
10
+
11
+ attr_reader :root
12
+
13
+ def self.for_root(root)
14
+ loader = new
15
+ loader.reset_on_root(root)
16
+ return loader
17
+ end
18
+
19
+ def reset_on_root(root)
20
+ @root = File.expand_path(root)
21
+ end
22
+
23
+ def path_to(path)
24
+ if(path[0] == "/"[0])
25
+ return path
26
+ else
27
+ return File.expand_path(File.join(@root, path))
28
+ end
29
+ end
30
+
31
+ def exists?(path)
32
+ return File.exists?(path_to(path))
33
+ end
34
+
35
+ alias :pathTo :path_to
36
+
37
+ def load(path)
38
+ file_to_load = path_to(path)
39
+ raise LimelightException.new("File not found: #{file_to_load}") if not File.exists?(file_to_load)
40
+ return IO.read(file_to_load)
41
+ end
42
+
43
+ alias :read :load
44
+
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,49 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+
6
+ class AnonymousActionListener
7
+ include java.awt.event.ActionListener
8
+
9
+ def initialize(context, symbol)
10
+ @context = context
11
+ @symbol = symbol
12
+ end
13
+
14
+ def actionPerformed(e)
15
+ method = @context.method(@symbol)
16
+ method.call
17
+ end
18
+ end
19
+
20
+ class MenuBar
21
+
22
+ def self.build(context, &prop)
23
+ builder = self.new(context)
24
+ builder.instance_eval(&prop)
25
+ return builder.menu_bar
26
+ end
27
+
28
+ attr_reader :menu_bar
29
+
30
+ def initialize(context)
31
+ @context = context
32
+ @menu_bar = javax.swing.JMenuBar.new
33
+ end
34
+
35
+ def menu(name)
36
+ @menu = javax.swing.JMenu.new(name)
37
+ @menu_bar.add(@menu)
38
+ yield
39
+ end
40
+
41
+ def item(name, symbol)
42
+ menu_item = javax.swing.JMenuItem.new(name)
43
+ @menu.add(menu_item)
44
+ menu_item.addActionListener(AnonymousActionListener.new(@context, symbol))
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,25 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require 'limelight/pen'
5
+
6
+ module Limelight
7
+
8
+ class PaintAction
9
+
10
+ include Java::limelight.ui.painting.PaintAction
11
+
12
+ attr_reader :block
13
+
14
+ def initialize(&block)
15
+ @block = block
16
+ end
17
+
18
+ def invoke(graphics)
19
+ pen = Pen.new(graphics)
20
+ @block.call(pen)
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,53 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+
6
+ class Pen
7
+
8
+ attr_accessor :context
9
+
10
+ def initialize(context)
11
+ @context = context
12
+ self.color = "black"
13
+ self.width = 1
14
+ self.smooth = false
15
+ end
16
+
17
+ def color=(value)
18
+ resolve_color = Java::limelight.ui.Colors.resolve(value)
19
+ @context.setColor(resolve_color)
20
+ end
21
+
22
+ def width=(value)
23
+ @context.setStroke(java.awt.BasicStroke.new(value))
24
+ end
25
+
26
+ def smooth=(value)
27
+ hint = value ? java.awt.RenderingHints::VALUE_ANTIALIAS_ON : java.awt.RenderingHints::VALUE_ANTIALIAS_OFF
28
+ @context.setRenderingHint(java.awt.RenderingHints::KEY_ANTIALIASING, hint)
29
+ end
30
+
31
+ def draw_line(x1, y1, x2, y2)
32
+ @context.drawLine(x1, y1, x2, y2)
33
+ end
34
+
35
+ def draw_rectangle(x, y, width, height)
36
+ @context.drawRect(x, y, width, height)
37
+ end
38
+
39
+ def fill_rectangle(x, y, width, height)
40
+ @context.fillRect(x, y, width, height)
41
+ end
42
+
43
+ def draw_oval(x, y, width, height)
44
+ @context.drawOval(x, y, width, height)
45
+ end
46
+
47
+ def fill_oval(x, y, width, height)
48
+ @context.fillOval(x, y, width, height)
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,29 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+ module Players
6
+
7
+ module Button
8
+ class << self
9
+ def extended(prop)
10
+ prop.panel.painters.clear
11
+ painter = Java.limelight.ui.painting.ButtonPainter.new(prop.panel)
12
+ prop.button = painter.button
13
+ prop.panel.painters << painter
14
+ prop.panel.clear_event_listeners
15
+ set_default_styles(prop)
16
+ end
17
+
18
+ def set_default_styles(prop)
19
+ prop.style.width = "100"
20
+ prop.style.height = "25"
21
+ end
22
+ end
23
+
24
+ attr_accessor :button
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+ module Players
6
+
7
+ module CheckBox
8
+ class << self
9
+ def extended(prop)
10
+ prop.panel.painters.clear
11
+ painter = Java.limelight.ui.painting.CheckBoxPainter.new(prop.panel)
12
+ prop.check_box = painter.check_box
13
+ prop.panel.painters << painter
14
+ prop.panel.clear_event_listeners
15
+ set_default_styles(prop)
16
+ end
17
+
18
+ def set_default_styles(prop)
19
+ prop.style.width = "22"
20
+ prop.style.height = "22"
21
+ end
22
+ end
23
+
24
+ attr_accessor :check_box
25
+
26
+ def checked=(value)
27
+ check_box.selected = value
28
+ end
29
+
30
+ def checked
31
+ return check_box.is_selected
32
+ end
33
+ alias :checked? :checked
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,44 @@
1
+ #- Copyright 2008 8th Light, Inc.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ module Limelight
5
+ module Players
6
+
7
+ module ComboBox
8
+ class << self
9
+ def extended(prop)
10
+ prop.panel.painters.clear
11
+ painter = Java.limelight.ui.painting.ComboBoxPainter.new(prop.panel)
12
+ prop.combo_box = painter.combo_box
13
+ prop.panel.painters << painter
14
+ prop.panel.clear_event_listeners
15
+ set_default_styles(prop)
16
+ end
17
+
18
+ def set_default_styles(prop)
19
+ prop.style.width = "120"
20
+ prop.style.height = "22"
21
+ end
22
+ end
23
+
24
+ attr_accessor :combo_box
25
+
26
+ def choices=(value)
27
+ value = eval(value) if value.is_a? String
28
+ raise "Invalid choices type: #{value.class}. Choices have to be an array." if !value.is_a?(Array)
29
+ combo_box.remove_all_items
30
+ value.each { |choice| combo_box.add_item(choice) }
31
+ end
32
+
33
+ def value=(text)
34
+ self.text = text
35
+ end
36
+
37
+ def value
38
+ return self.text
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end