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,51 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_widget"
3
- require File.dirname(__FILE__) + "/models/model_binding"
4
-
5
- module Glimmer
6
- # Responsible for setting up the return value of the bind keyword (command symbol)
7
- # as a ModelBinding. It is then used by another command handler like
8
- # DataBindingCommandHandler for text and selection properties on Text and Spinner
9
- # or TableItemsDataBindingCommandHandler for items in a Table
10
- class BindCommandHandler
11
- include CommandHandler
12
-
13
- include_package 'org.eclipse.swt.widgets'
14
-
15
- def can_handle?(parent, command_symbol, *args, &block)
16
- (
17
- parent.is_a?(GWidget) and
18
- command_symbol.to_s == "bind" and
19
- (
20
- (
21
- (args.size == 2) and
22
- (
23
- args[1].is_a?(Symbol) or
24
- args[1].is_a?(String)
25
- )
26
- ) or
27
- (
28
- (args.size == 3) and
29
- (args[1].is_a?(Symbol) or args[1].is_a?(String)) and
30
- (args[2].is_a?(Symbol) or args[2].is_a?(String) or args[2].is_a?(Hash))
31
- ) or
32
- (
33
- (args.size == 4) and
34
- (args[1].is_a?(Symbol) or args[1].is_a?(String)) and
35
- (args[2].is_a?(Symbol) or args[2].is_a?(String)) and
36
- (args[3].is_a?(Hash))
37
- )
38
- ) and
39
- block == nil
40
- )
41
- end
42
-
43
- def do_handle(parent, command_symbol, *args, &block)
44
- property_type = args[2] if (args.size == 3) && !args[2].is_a?(Hash)
45
- binding_options = args[2] if args[2].is_a?(Hash)
46
- binding_options = args[3] if args[3].is_a?(Hash)
47
- ModelBinding.new(args[0], args[1].to_s, property_type, binding_options)
48
- end
49
-
50
- end
51
- end
@@ -1,26 +0,0 @@
1
- require_relative '../command_handler'
2
- require_relative 'models/g_color'
3
-
4
- module Glimmer
5
- class ColorCommandHandler
6
- include CommandHandler
7
-
8
- include_package 'org.eclipse.swt.widgets'
9
-
10
- def can_handle?(parent, command_symbol, *args, &block)
11
- ['rgba', 'rgb'].include?(command_symbol.to_s) and
12
- (3..5).include?(args.count)
13
- end
14
-
15
- def do_handle(parent, command_symbol, *args, &block)
16
- if args.first.is_a?(Display) || args.first.nil?
17
- display = args.delete_at(0)
18
- elsif parent.is_a?(GWidget)
19
- display = parent.widget.display
20
- else
21
- display = nil
22
- end
23
- GColor.new(display, *args)
24
- end
25
- end
26
- end
@@ -1,40 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_widget"
3
-
4
- module Glimmer
5
- class ComboSelectionDataBindingCommandHandler
6
- include CommandHandler
7
- include Glimmer
8
-
9
- include_package 'org.eclipse.swt.widgets'
10
-
11
- def can_handle?(parent, command_symbol, *args, &block)
12
- parent.is_a?(GWidget) and
13
- parent.widget.is_a?(Combo) and
14
- command_symbol.to_s == "selection" and
15
- args.size == 1 and
16
- args[0].is_a?(ModelBinding) and
17
- args[0].evaluate_options_property.is_a?(Array) and
18
- block == nil
19
- end
20
-
21
- def do_handle(parent, command_symbol, *args, &block)
22
- model_binding = args[0]
23
- widget_binding = WidgetBinding.new(parent, "items")
24
- widget_binding.call(model_binding.evaluate_options_property)
25
- model = model_binding.base_model
26
- widget_binding.observe(model, model_binding.options_property_name)
27
-
28
- widget_binding = WidgetBinding.new(parent, "text")
29
- widget_binding.call(model_binding.evaluate_property)
30
- widget_binding.observe(model, model_binding.property_name_expression)
31
-
32
- add_contents(parent) {
33
- on_widget_selected {
34
- model_binding.call(widget_binding.evaluate_property)
35
- }
36
- }
37
- end
38
-
39
- end
40
- end
@@ -1,69 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_widget"
3
- require File.dirname(__FILE__) + "/models/observable_model"
4
- require File.dirname(__FILE__) + "/models/model_binding"
5
- require File.dirname(__FILE__) + "/models/widget_binding"
6
-
7
- module Glimmer
8
- # Responsible for wiring two-way data-binding for text and selection properties
9
- # on Text, Button, and Spinner widgets.
10
- # Does so by using the output of the bind(model, property) command in the form
11
- # of a ModelBinding, which is then connected to an anonymous widget observer
12
- # (aka widget_data_binder as per widget_data_binders array)
13
- #
14
- # Depends on BindCommandHandler
15
- class DataBindingCommandHandler
16
- extend Glimmer
17
- include CommandHandler
18
-
19
- include_package 'org.eclipse.swt.widgets'
20
-
21
- @@widget_data_binders = {
22
- Java::OrgEclipseSwtWidgets::Text => {
23
- :text => Proc.new do |g_widget, model_binding|
24
- add_contents(g_widget) {
25
- on_modify_text { |modify_event|
26
- model_binding.call(g_widget.widget.getText)
27
- }
28
- }
29
- end,
30
- },
31
- Java::OrgEclipseSwtWidgets::Button => {
32
- :selection => Proc.new do |g_widget, model_binding|
33
- add_contents(g_widget) {
34
- on_widget_selected { |selection_event|
35
- model_binding.call(g_widget.widget.getSelection)
36
- }
37
- }
38
- end
39
- },
40
- Java::OrgEclipseSwtWidgets::Spinner => {
41
- :selection => Proc.new do |g_widget, model_binding|
42
- add_contents(g_widget) {
43
- on_widget_selected { |selection_event|
44
- model_binding.call(g_widget.widget.getSelection)
45
- }
46
- }
47
- end
48
- }
49
- }
50
-
51
- def can_handle?(parent, command_symbol, *args, &block)
52
- (parent.is_a?(GWidget) and
53
- args.size == 1 and
54
- args[0].is_a?(ModelBinding))
55
- end
56
-
57
- def do_handle(parent, command_symbol, *args, &block)
58
- model_binding = args[0]
59
- widget_binding_parameters = [parent, command_symbol.to_s]
60
- widget_binding = WidgetBinding.new(*widget_binding_parameters)
61
- widget_binding.call(model_binding.evaluate_property)
62
- widget_binding.observe(model_binding)
63
- widget_data_binder_map = @@widget_data_binders[parent.widget.class]
64
- widget_data_binder = widget_data_binder_map[command_symbol.to_s.to_sym] if widget_data_binder_map
65
- widget_data_binder.call(parent, model_binding) if widget_data_binder
66
- end
67
-
68
- end
69
- end
@@ -1,16 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_display"
3
-
4
- module Glimmer
5
- class DisplayCommandHandler
6
- include CommandHandler
7
-
8
- def can_handle?(parent, command_symbol, *args, &block)
9
- command_symbol.to_s == "display"
10
- end
11
-
12
- def do_handle(parent, command_symbol, *args, &block)
13
- GDisplay.instance(*args)
14
- end
15
- end
16
- end
@@ -1,23 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_layout"
3
-
4
- module Glimmer
5
- class LayoutCommandHandler
6
- include CommandHandler
7
-
8
- include_package 'org.eclipse.swt.widgets'
9
- include_package 'org.eclipse.swt.layout'
10
-
11
- def can_handle?(parent, command_symbol, *args, &block)
12
- parent.is_a?(GWidget) and
13
- parent.widget.is_a?(Composite) and
14
- command_symbol.to_s.end_with?('_layout') and
15
- GLayout.layout_exists?(command_symbol.to_s)
16
- end
17
-
18
- def do_handle(parent, command_symbol, *args, &block)
19
- Glimmer.logger.debug "Layout #{command_symbol} args are: #{args.inspect}"
20
- GLayout.new(command_symbol.to_s, parent.widget, args)
21
- end
22
- end
23
- end
@@ -1,22 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_widget"
3
- require File.dirname(__FILE__) + "/models/g_layout_data"
4
-
5
- module Glimmer
6
- class LayoutDataCommandHandler
7
- include CommandHandler
8
-
9
- include_package 'org.eclipse.swt.widgets'
10
- include_package 'org.eclipse.swt.layout'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- parent.is_a?(GWidget) and
14
- command_symbol.to_s == 'layout_data'
15
- end
16
-
17
- def do_handle(parent, command_symbol, *args, &block)
18
- Glimmer.logger.debug "Layout Data args are: #{args.inspect}"
19
- GLayoutData.new(parent.widget, args)
20
- end
21
- end
22
- end
@@ -1,45 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/g_widget"
3
- require File.dirname(__FILE__) + "/models/list_selection_binding"
4
-
5
- module Glimmer
6
- class ListSelectionDataBindingCommandHandler
7
- include CommandHandler
8
- include Glimmer
9
-
10
- include_package 'org.eclipse.swt.widgets'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- parent.is_a?(GWidget) and
14
- parent.widget.is_a?(List) and
15
- command_symbol.to_s == "selection" and
16
- args.size == 1 and
17
- args[0].is_a?(ModelBinding) and
18
- args[0].evaluate_options_property.is_a?(Array) and
19
- block == nil
20
- end
21
-
22
- def do_handle(parent, command_symbol, *args, &block)
23
- model_binding = args[0]
24
- widget_binding = WidgetBinding.new(parent, "items")
25
- widget_binding.call(model_binding.evaluate_options_property)
26
- model = model_binding.base_model
27
- #TODO make this options observer dependent and all similar observers in widget specific data binding handlers
28
- widget_binding.observe(model, model_binding.options_property_name)
29
-
30
- property_type = :string
31
- property_type = :array if parent.has_style?(:multi)
32
- list_selection_binding = ListSelectionBinding.new(parent, property_type)
33
- list_selection_binding.call(model_binding.evaluate_property)
34
- #TODO check if nested data binding works for list widget and other widgets that need custom data binding
35
- list_selection_binding.observe(model, model_binding.property_name_expression)
36
-
37
- add_contents(parent) {
38
- on_widget_selected {
39
- model_binding.call(list_selection_binding.evaluate_property)
40
- }
41
- }
42
- end
43
-
44
- end
45
- end
@@ -1,34 +0,0 @@
1
- require_relative 'g_swt'
2
-
3
- module Glimmer
4
- class GColor
5
- attr_reader :display, :red, :green, :blue, :alpha
6
-
7
- include_package 'org.eclipse.swt.graphics'
8
-
9
- class << self
10
- include_package 'org.eclipse.swt'
11
-
12
- def for(display, standard_color)
13
- display.getSystemColor(GSWT[standard_color])
14
- end
15
- end
16
-
17
- def initialize(display, red, green, blue, alpha = nil)
18
- @display = display
19
- @red = red
20
- @green = green
21
- @blue = blue
22
- @alpha = alpha
23
- end
24
-
25
- def color
26
- @color ||= Color.new(@display, *[@red, @green, @blue, @alpha].compact)
27
- end
28
-
29
- def display=(a_display)
30
- @display = a_display
31
- @color = nil
32
- end
33
- end
34
- end
@@ -1,26 +0,0 @@
1
- module Glimmer
2
- # Wrapper around SWT Display
3
- class GDisplay
4
- include_package 'org.eclipse.swt.widgets'
5
-
6
- class << self
7
- def instance(*args)
8
- if @instance.nil? || @instance.display.isDisposed
9
- @instance = GDisplay.new(*args)
10
- end
11
- @instance
12
- end
13
- end
14
-
15
- # SWT Display object wrapped
16
- attr_reader :display
17
-
18
- def initialize(*args)
19
- @display = Display.new(*args)
20
- end
21
-
22
- def dispose
23
- @display.dispose
24
- end
25
- end
26
- end
@@ -1,73 +0,0 @@
1
- require_relative 'g_swt'
2
-
3
- module Glimmer
4
- class GFont
5
- ERROR_INVALID_FONT_STYLE = " is an invalid font style! Valid values are :normal, :bold, and :italic"
6
- FONT_STYLES = [:normal, :bold, :italic]
7
- include_package 'org.eclipse.swt.graphics'
8
-
9
- extend Glimmer
10
-
11
- attr_reader :g_widget
12
- attr_accessor :display
13
-
14
- class << self
15
- def for(g_widget)
16
- @instances ||= {}
17
- unless @instances[g_widget]
18
- @instances[g_widget] = new(g_widget)
19
- add_contents(g_widget) {
20
- on_widget_disposed { |dispose_event|
21
- @instances.delete(g_widget)
22
- }
23
- }
24
- end
25
- @instances[g_widget]
26
- end
27
- end
28
-
29
- def initialize(g_widget, display = nil)
30
- @g_widget = g_widget
31
- @display = display || @g_widget.widget.display
32
- end
33
-
34
- def g_widget=(a_widget)
35
- @g_widget = a_widget
36
- @font_datum = nil
37
- end
38
-
39
- def font_datum
40
- @font_datum ||= @g_widget.widget.getFont.getFontData[0]
41
- end
42
-
43
- def name
44
- font_datum.getName
45
- end
46
-
47
- def height
48
- font_datum.getHeight
49
- end
50
-
51
- def style
52
- font_datum.getStyle
53
- end
54
-
55
- def font(font_properties)
56
- detect_invalid_font_property(font_properties)
57
- font_properties[:style] = GSWT[*font_properties[:style]]
58
- font_data_args = [:name, :height, :style].map do |font_property_name|
59
- font_properties[font_property_name] || send(font_property_name)
60
- end
61
- font_datum = FontData.new(*font_data_args)
62
- Font.new(@display, font_datum)
63
- end
64
-
65
- def detect_invalid_font_property(font_properties)
66
- [font_properties[:style]].flatten.select do |style|
67
- style.is_a?(Symbol) || style.is_a?(String)
68
- end.each do |style|
69
- raise style.to_s + ERROR_INVALID_FONT_STYLE if !FONT_STYLES.include?(style.to_sym)
70
- end
71
- end
72
- end
73
- end
@@ -1,71 +0,0 @@
1
- require_relative '../../parent'
2
- require_relative 'g_swt'
3
-
4
- module Glimmer
5
- class GLayout
6
- include_package 'org.eclipse.swt.layout'
7
-
8
- include Parent
9
-
10
- attr_reader :composite
11
- attr_reader :layout
12
-
13
- class << self
14
- include_package 'org.eclipse.swt.layout'
15
-
16
- def layout_exists?(underscored_layout_name)
17
- begin
18
- swt_layout_class_for(underscored_layout_name)
19
- true
20
- rescue NameError => e
21
- false
22
- end
23
- end
24
-
25
- # This supports layouts in and out of basic SWT
26
- def swt_layout_class_for(underscored_layout_name)
27
- swt_layout_name = underscored_layout_name.camelcase(:upper)
28
- swt_layout_class = eval(swt_layout_name)
29
- unless swt_layout_class.ancestors.include?(org.eclipse.swt.widgets.Layout)
30
- raise NameError, "Class #{swt_layout_class} matching #{underscored_layout_name} is not a subclass of org.eclipse.swt.widgets.Layout"
31
- end
32
- swt_layout_class
33
- rescue => e
34
- Glimmer.logger.debug "#{e.message}\n#{e.backtrace.join("\n")}"
35
- raise e
36
- end
37
- end
38
-
39
- def initialize(underscored_layout_name, composite, args)
40
- @underscored_layout_name = underscored_layout_name
41
- @composite = composite
42
- args = GSWT.constantify_args(args)
43
- @layout = self.class.swt_layout_class_for(underscored_layout_name).new(*args)
44
- @composite.setLayout(@layout)
45
- end
46
-
47
- def process_block(block)
48
- block.call(@layout)
49
- end
50
-
51
- def has_attribute?(attribute_name, *args)
52
- @layout.respond_to?(attribute_setter(attribute_name), args)
53
- end
54
-
55
- def set_attribute(attribute_name, *args)
56
- apply_property_type_converters(attribute_name, args)
57
- @layout.send(attribute_setter(attribute_name), *args)
58
- end
59
-
60
- def apply_property_type_converters(attribute_name, args)
61
- if args.count == 1 && GSWT.has_constant?(args.first)
62
- args[0] = GSWT.constant(args.first)
63
- end
64
- end
65
-
66
- def attribute_setter(attribute_name)
67
- "#{attribute_name.to_s.camelcase(:lower)}="
68
- end
69
-
70
- end
71
- end