glimmer 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.markdown +109 -2
  3. data/bin/girb +4 -2
  4. data/bin/glimmer +3 -2
  5. data/lib/glimmer.rb +6 -3
  6. data/lib/glimmer/command_handlers.rb +37 -34
  7. data/lib/glimmer/ext/module.rb +20 -0
  8. data/lib/glimmer/launcher.rb +75 -0
  9. data/lib/glimmer/swt/command_handlers/bind_command_handler.rb +55 -0
  10. data/lib/glimmer/swt/command_handlers/color_command_handler.rb +30 -0
  11. data/lib/glimmer/swt/command_handlers/combo_selection_data_binding_command_handler.rb +43 -0
  12. data/lib/glimmer/swt/command_handlers/custom_widget_command_handler.rb +24 -0
  13. data/lib/glimmer/swt/command_handlers/data_binding_command_handler.rb +72 -0
  14. data/lib/glimmer/swt/command_handlers/display_command_handler.rb +20 -0
  15. data/lib/glimmer/swt/command_handlers/layout_command_handler.rb +27 -0
  16. data/lib/glimmer/swt/command_handlers/layout_data_command_handler.rb +26 -0
  17. data/lib/glimmer/swt/command_handlers/list_selection_data_binding_command_handler.rb +48 -0
  18. data/lib/glimmer/swt/command_handlers/property_command_handler.rb +24 -0
  19. data/lib/glimmer/swt/command_handlers/shell_command_handler.rb +20 -0
  20. data/lib/glimmer/swt/command_handlers/tab_item_command_handler.rb +24 -0
  21. data/lib/glimmer/swt/command_handlers/table_column_properties_data_binding_command_handler.rb +28 -0
  22. data/lib/glimmer/swt/command_handlers/table_items_data_binding_command_handler.rb +33 -0
  23. data/lib/glimmer/swt/command_handlers/tree_items_data_binding_command_handler.rb +32 -0
  24. data/lib/glimmer/swt/command_handlers/tree_properties_data_binding_command_handler.rb +28 -0
  25. data/lib/glimmer/swt/command_handlers/widget_command_handler.rb +26 -0
  26. data/lib/glimmer/swt/command_handlers/widget_listener_command_handler.rb +43 -0
  27. data/lib/glimmer/swt/custom_widget.rb +91 -0
  28. data/lib/glimmer/swt/g_color.rb +39 -0
  29. data/lib/glimmer/swt/g_display.rb +28 -0
  30. data/lib/glimmer/swt/g_font.rb +75 -0
  31. data/lib/glimmer/swt/g_layout.rb +72 -0
  32. data/lib/glimmer/swt/g_layout_data.rb +56 -0
  33. data/lib/glimmer/swt/g_runnable.rb +15 -0
  34. data/lib/glimmer/swt/g_shell.rb +50 -0
  35. data/lib/glimmer/swt/g_swt.rb +65 -0
  36. data/lib/glimmer/swt/g_tab_item_composite.rb +34 -0
  37. data/lib/glimmer/swt/g_widget.rb +213 -0
  38. data/lib/glimmer/swt/g_widget_listener.rb +12 -0
  39. data/lib/glimmer/swt/list_selection_binding.rb +49 -0
  40. data/lib/glimmer/swt/model_binding.rb +208 -0
  41. data/lib/glimmer/swt/observable.rb +13 -0
  42. data/lib/glimmer/swt/observable_array.rb +105 -0
  43. data/lib/glimmer/swt/observable_model.rb +107 -0
  44. data/lib/glimmer/swt/observer.rb +117 -0
  45. data/lib/glimmer/swt/proc_tracker.rb +16 -0
  46. data/lib/glimmer/swt/table_items_binding.rb +47 -0
  47. data/lib/glimmer/swt/tree_items_binding.rb +51 -0
  48. data/lib/glimmer/swt/widget_binding.rb +31 -0
  49. data/lib/glimmer/xml/command_handlers/html_command_handler.rb +50 -0
  50. data/lib/glimmer/xml/command_handlers/xml_command_handler.rb +23 -0
  51. data/lib/glimmer/xml/command_handlers/xml_name_space_command_handler.rb +36 -0
  52. data/lib/glimmer/xml/command_handlers/xml_tag_command_handler.rb +28 -0
  53. data/lib/glimmer/xml/command_handlers/xml_text_command_handler.rb +24 -0
  54. data/lib/glimmer/xml/depth_first_search_iterator.rb +20 -0
  55. data/lib/glimmer/xml/name_space_visitor.rb +21 -0
  56. data/lib/glimmer/xml/node.rb +84 -0
  57. data/lib/glimmer/xml/node_visitor.rb +13 -0
  58. data/lib/glimmer/xml/xml_visitor.rb +63 -0
  59. data/lib/glimmer/xml_command_handlers.rb +11 -10
  60. metadata +68 -50
  61. data/lib/glimmer/command_handlers/bind_command_handler.rb +0 -51
  62. data/lib/glimmer/command_handlers/color_command_handler.rb +0 -26
  63. data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +0 -40
  64. data/lib/glimmer/command_handlers/data_binding_command_handler.rb +0 -69
  65. data/lib/glimmer/command_handlers/display_command_handler.rb +0 -16
  66. data/lib/glimmer/command_handlers/layout_command_handler.rb +0 -23
  67. data/lib/glimmer/command_handlers/layout_data_command_handler.rb +0 -22
  68. data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +0 -45
  69. data/lib/glimmer/command_handlers/models/g_color.rb +0 -34
  70. data/lib/glimmer/command_handlers/models/g_display.rb +0 -26
  71. data/lib/glimmer/command_handlers/models/g_font.rb +0 -73
  72. data/lib/glimmer/command_handlers/models/g_layout.rb +0 -71
  73. data/lib/glimmer/command_handlers/models/g_layout_data.rb +0 -55
  74. data/lib/glimmer/command_handlers/models/g_runnable.rb +0 -13
  75. data/lib/glimmer/command_handlers/models/g_shell.rb +0 -49
  76. data/lib/glimmer/command_handlers/models/g_swt.rb +0 -63
  77. data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +0 -33
  78. data/lib/glimmer/command_handlers/models/g_widget.rb +0 -214
  79. data/lib/glimmer/command_handlers/models/g_widget_listener.rb +0 -11
  80. data/lib/glimmer/command_handlers/models/list_selection_binding.rb +0 -47
  81. data/lib/glimmer/command_handlers/models/model_binding.rb +0 -206
  82. data/lib/glimmer/command_handlers/models/observable.rb +0 -11
  83. data/lib/glimmer/command_handlers/models/observable_array.rb +0 -104
  84. data/lib/glimmer/command_handlers/models/observable_model.rb +0 -105
  85. data/lib/glimmer/command_handlers/models/observer.rb +0 -115
  86. data/lib/glimmer/command_handlers/models/table_items_binding.rb +0 -45
  87. data/lib/glimmer/command_handlers/models/tree_items_binding.rb +0 -49
  88. data/lib/glimmer/command_handlers/models/widget_binding.rb +0 -29
  89. data/lib/glimmer/command_handlers/property_command_handler.rb +0 -21
  90. data/lib/glimmer/command_handlers/shell_command_handler.rb +0 -17
  91. data/lib/glimmer/command_handlers/tab_item_command_handler.rb +0 -21
  92. data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -25
  93. data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +0 -30
  94. data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +0 -29
  95. data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +0 -25
  96. data/lib/glimmer/command_handlers/widget_command_handler.rb +0 -22
  97. data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +0 -39
  98. data/lib/glimmer/xml_command_handlers/html_command_handler.rb +0 -47
  99. data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +0 -19
  100. data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +0 -20
  101. data/lib/glimmer/xml_command_handlers/models/node.rb +0 -82
  102. data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +0 -11
  103. data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +0 -61
  104. data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +0 -20
  105. data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +0 -33
  106. data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +0 -25
  107. data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +0 -21
  108. data/lib/glimmer_application.rb +0 -65
@@ -1,82 +0,0 @@
1
- require File.dirname(__FILE__) + "/depth_first_search_iterator"
2
- require File.dirname(__FILE__) + "/xml_visitor"
3
-
4
- module Glimmer
5
- class Node
6
- include Parent, Glimmer
7
-
8
- attr_accessor :children, :name, :contents, :attributes, :is_name_space, :is_attribute, :name_space, :parent
9
-
10
- def initialize(parent, name, attributes, &contents)
11
- @is_name_space = false
12
- @children = []
13
- @parent = parent
14
- if (parent and parent.is_name_space)
15
- @name_space = parent
16
- @parent = @name_space.parent
17
- end
18
- @parent.children << self if @parent
19
- @name = name
20
- @contents = contents
21
- @attributes = attributes
22
- if @attributes
23
- @attributes.each_key do |attribute|
24
- if attribute.is_a?(Node)
25
- attribute.is_attribute = true
26
- attribute.parent.children.delete(attribute) if attribute.parent
27
- attribute.parent = nil #attributes do not usually have parents
28
- end
29
- end
30
- Glimmer.logger.debug(attributes)
31
- end
32
- end
33
-
34
- def method_missing(symbol, *args, &block)
35
- @is_name_space = true
36
- parent.children.delete(self) if parent
37
- Glimmer.add_contents(self) {@tag = super}
38
- @tag
39
- end
40
-
41
- def to_xml
42
- xml_visitor = XmlVisitor.new
43
- DepthFirstSearchIterator.new(self, xml_visitor).iterate
44
- xml_visitor.document
45
- end
46
-
47
- def process_block(block)
48
- return_value = block.call(@widget)
49
- if return_value.is_a?(String) and !@children.include?(return_value)
50
- text = return_value
51
- first_match = text.match(/[#][^{]+[{][^}]+[}]/)
52
- match = first_match
53
- while (match)
54
- Glimmer.module_eval(text_command(match.pre_match))
55
- tag_text = match.to_s
56
- Glimmer.module_eval(rubyize(tag_text))
57
- text = tag_text
58
- post_match = match.post_match
59
- match = text.match(/[#]\w+[{]\w+[}]/)
60
- end
61
- Glimmer.module_eval(text_command(post_match)) if post_match
62
- @children << return_value unless first_match
63
- end
64
- end
65
-
66
- def text_command(text)
67
- "text \"#{text}\""
68
- end
69
-
70
- def rubyize(text)
71
- text = text.gsub(/[}]/, '"}')
72
- text = text.gsub(/[{]/, '{"')
73
- text = text.gsub(/[#]/, '')
74
- end
75
-
76
- #override Object default id method and route it to Glimmer engine
77
- def id
78
- method_missing(:id)
79
- end
80
-
81
- end
82
- end
@@ -1,11 +0,0 @@
1
- module Glimmer
2
- class NodeVisitor
3
- def process_before_children
4
- raise "must be implemented by a class"
5
- end
6
-
7
- def process_after_children
8
- raise "must be implemented by a class"
9
- end
10
- end
11
- end
@@ -1,61 +0,0 @@
1
- require File.dirname(__FILE__) + "/node_visitor"
2
-
3
- module Glimmer
4
- class XmlVisitor < NodeVisitor
5
-
6
- attr_reader :document
7
-
8
- def initialize
9
- @document = ""
10
- end
11
-
12
- def process_before_children(node)
13
- if (node.is_a?(String))
14
- @document << node
15
- return
16
- end
17
- begin_open_tag(node)
18
- append_attributes(node) if node.attributes
19
- end_open_tag(node)
20
- end
21
-
22
- def process_after_children(node)
23
- return if (node.is_a?(String))
24
- append_close_tag(node)
25
- end
26
-
27
- def begin_open_tag(node)
28
- @document << "<"
29
- @document << "#{node.name_space.name}:" if node.name_space
30
- @document << node.name
31
- end
32
-
33
- def end_open_tag(node)
34
- if (node.contents)
35
- @document << ">"
36
- else
37
- @document << " " if node.attributes.keys.size > 0
38
- @document << "/>"
39
- end
40
- end
41
-
42
- def append_close_tag(node)
43
- if (node.contents)
44
- @document << "</"
45
- @document << "#{node.name_space.name}:" if node.name_space
46
- @document << "#{node.name}>"
47
- end
48
- end
49
-
50
- def append_attributes(node)
51
- Glimmer.logger.debug "Take 3"
52
- Glimmer.logger.debug(node.attributes)
53
- node.attributes.each_key do |attribute|
54
- attribute_name = attribute
55
- attribute_name = "#{attribute.name_space.name}:#{attribute.name}" if attribute.is_a?(Node)
56
- @document << " #{attribute_name}=\"#{node.attributes[attribute]}\""
57
- end
58
- end
59
-
60
- end
61
- end
@@ -1,20 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/node"
3
-
4
- module Glimmer
5
- class XmlCommandHandler
6
- include CommandHandler
7
-
8
- def can_handle?(parent, command_symbol, *args, &block)
9
- (parent == nil or parent.is_a?(Node)) and
10
- (args.size == 0 or ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))))
11
- end
12
-
13
- def do_handle(parent, command_symbol, *args, &block)
14
- attributes = Hash.new
15
- attributes = args[0] if (args.size == 1)
16
- Node.new(parent, command_symbol.to_s, attributes, &block)
17
- end
18
-
19
- end
20
- end
@@ -1,33 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/node"
3
- require File.dirname(__FILE__) + "/models/depth_first_search_iterator"
4
- require File.dirname(__FILE__) + "/models/name_space_visitor"
5
-
6
- module Glimmer
7
- class XmlNameSpaceCommandHandler
8
- include CommandHandler, Glimmer
9
-
10
- def can_handle?(parent, command_symbol, *args, &block)
11
- (parent == nil or parent.is_a?(Node)) and
12
- (command_symbol.to_s == "name_space")
13
- (args.size == 1) and
14
- (args[0].is_a?(Symbol)) and
15
- block
16
- end
17
-
18
- def do_handle(parent, command_symbol, *args, &block)
19
- node = block.call
20
- unless node.is_a?(String)
21
- name_space_visitor = NameSpaceVisitor.new(args[0].to_s)
22
- DepthFirstSearchIterator.new(node, name_space_visitor).iterate
23
- def node.process_block(block)
24
- Glimmer.logger.debug 'block'
25
- #NOOP
26
- end
27
- end
28
- parent.children << node if parent and !parent.children.include?(node)
29
- node
30
- end
31
-
32
- end
33
- end
@@ -1,25 +0,0 @@
1
- require "facets"
2
- require File.dirname(__FILE__) + "/../command_handler"
3
- require File.dirname(__FILE__) + "/models/node"
4
-
5
- module Glimmer
6
- class XmlTagCommandHandler
7
- include CommandHandler
8
-
9
- def can_handle?(parent, command_symbol, *args, &block)
10
- (parent == nil or parent.is_a?(Node)) and
11
- (command_symbol.to_s == "tag") and
12
- ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))) and
13
- args[0].include?(:_name)
14
- end
15
-
16
- def do_handle(parent, command_symbol, *args, &block)
17
- attributes = nil
18
- attributes = args[0] if (args.size == 1)
19
- tag_name = attributes[:_name]
20
- attributes.delete(:_name)
21
- Node.new(parent, tag_name, attributes, &block)
22
- end
23
-
24
- end
25
- end
@@ -1,21 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/node"
3
-
4
- module Glimmer
5
- class XmlTextCommandHandler
6
- include CommandHandler
7
-
8
- def can_handle?(parent, command_symbol, *args, &block)
9
- (parent == nil or parent.is_a?(Node)) and
10
- (command_symbol.to_s == "text") and
11
- ((args.size == 1) and (args[0].is_a?(String))) and
12
- !block
13
- end
14
-
15
- def do_handle(parent, command_symbol, *args, &block)
16
- parent.children << args[0] if parent
17
- args[0]
18
- end
19
-
20
- end
21
- end
@@ -1,65 +0,0 @@
1
- require 'os'
2
-
3
- class GlimmerApplication
4
- OPERATING_SYSTEMS_SUPPORTED = ["mac", "windows", "linux"]
5
- TEXT_USAGE = <<-MULTILINE
6
- Usage: glimmer application.rb
7
-
8
- Runs a Glimmer application using JRuby, automatically preloading
9
- the glimmer ruby gem and SWT jar dependency.
10
-
11
- Example: glimmer hello_world.rb
12
- This runs the Glimmer application hello_world.rb
13
- MULTILINE
14
- GLIMMER_LIB_LOCAL = File.expand_path(File.join(__FILE__, '..', 'glimmer.rb'))
15
- GLIMMER_LIB_GEM = 'glimmer'
16
-
17
- class << self
18
- def platform_os
19
- OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")}
20
- end
21
-
22
- def swt_jar_file
23
- @swt_jar_file ||= File.expand_path(File.join(__FILE__, '..', '..', 'vendor', 'swt', platform_os, 'swt.jar'))
24
- end
25
-
26
- def jruby_os_specific_options
27
- OS.mac? ? "-J-XstartOnFirstThread" : ""
28
- end
29
-
30
- def jruby_command_options
31
- "#{jruby_os_specific_options} -J-classpath \"#{swt_jar_file}\""
32
- end
33
-
34
- def launch(application, dev_mode = false)
35
- glimmer_lib = GLIMMER_LIB_GEM
36
- if dev_mode
37
- glimmer_lib = GLIMMER_LIB_LOCAL
38
- puts "[DEVELOPMENT MODE] (#{glimmer_lib})"
39
- end
40
- system "jruby #{jruby_command_options} -r #{glimmer_lib} -S #{application}"
41
- end
42
- end
43
-
44
- def initialize(options)
45
- @dev_mode = !!options.delete('--dev')
46
- @application_path = options.first
47
- end
48
-
49
- def start
50
- if @application_path
51
- launch_application
52
- else
53
- display_usage
54
- end
55
- end
56
-
57
- def launch_application
58
- puts "Launching Glimmer Application: #{@application_path}" unless @application_path == 'irb'
59
- self.class.launch(@application_path, @dev_mode)
60
- end
61
-
62
- def display_usage
63
- puts TEXT_USAGE
64
- end
65
- end