glimmer 0.8.1 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +327 -127
  4. data/VERSION +1 -1
  5. data/lib/glimmer.rb +35 -21
  6. data/lib/glimmer/config.rb +7 -12
  7. data/lib/glimmer/data_binding/observable_array.rb +32 -53
  8. data/lib/glimmer/data_binding/observable_model.rb +10 -14
  9. data/lib/glimmer/data_binding/observer.rb +3 -0
  10. data/lib/glimmer/dsl/engine.rb +58 -27
  11. data/lib/glimmer/dsl/expression.rb +0 -7
  12. data/lib/glimmer/dsl/static_expression.rb +2 -2
  13. data/lib/glimmer/excluded_keyword_error.rb +5 -0
  14. metadata +60 -136
  15. data/RUBY_VERSION +0 -1
  16. data/bin/girb +0 -10
  17. data/bin/girb_runner.rb +0 -13
  18. data/bin/glimmer +0 -5
  19. data/icons/scaffold_app.icns +0 -0
  20. data/lib/glimmer/css/rule.rb +0 -25
  21. data/lib/glimmer/css/style_sheet.rb +0 -19
  22. data/lib/glimmer/data_binding/list_selection_binding.rb +0 -52
  23. data/lib/glimmer/data_binding/observable_widget.rb +0 -17
  24. data/lib/glimmer/data_binding/shine.rb +0 -23
  25. data/lib/glimmer/data_binding/table_items_binding.rb +0 -47
  26. data/lib/glimmer/data_binding/tree_items_binding.rb +0 -71
  27. data/lib/glimmer/data_binding/widget_binding.rb +0 -33
  28. data/lib/glimmer/dsl/css/css_expression.rb +0 -21
  29. data/lib/glimmer/dsl/css/dsl.rb +0 -10
  30. data/lib/glimmer/dsl/css/dynamic_property_expression.rb +0 -12
  31. data/lib/glimmer/dsl/css/property_expression.rb +0 -22
  32. data/lib/glimmer/dsl/css/pv_expression.rb +0 -17
  33. data/lib/glimmer/dsl/css/rule_expression.rb +0 -25
  34. data/lib/glimmer/dsl/css/s_expression.rb +0 -26
  35. data/lib/glimmer/dsl/swt/async_exec_expression.rb +0 -14
  36. data/lib/glimmer/dsl/swt/bind_expression.rb +0 -37
  37. data/lib/glimmer/dsl/swt/color_expression.rb +0 -19
  38. data/lib/glimmer/dsl/swt/column_properties_expression.rb +0 -24
  39. data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +0 -42
  40. data/lib/glimmer/dsl/swt/custom_widget_expression.rb +0 -36
  41. data/lib/glimmer/dsl/swt/data_binding_expression.rb +0 -34
  42. data/lib/glimmer/dsl/swt/dialog_expression.rb +0 -26
  43. data/lib/glimmer/dsl/swt/display_expression.rb +0 -19
  44. data/lib/glimmer/dsl/swt/dsl.rb +0 -28
  45. data/lib/glimmer/dsl/swt/exec_expression.rb +0 -28
  46. data/lib/glimmer/dsl/swt/layout_data_expression.rb +0 -25
  47. data/lib/glimmer/dsl/swt/layout_expression.rb +0 -27
  48. data/lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb +0 -44
  49. data/lib/glimmer/dsl/swt/menu_bar_expression.rb +0 -33
  50. data/lib/glimmer/dsl/swt/menu_expression.rb +0 -32
  51. data/lib/glimmer/dsl/swt/observe_expression.rb +0 -32
  52. data/lib/glimmer/dsl/swt/property_expression.rb +0 -22
  53. data/lib/glimmer/dsl/swt/rgb_expression.rb +0 -12
  54. data/lib/glimmer/dsl/swt/rgba_expression.rb +0 -12
  55. data/lib/glimmer/dsl/swt/shell_expression.rb +0 -25
  56. data/lib/glimmer/dsl/swt/swt_expression.rb +0 -25
  57. data/lib/glimmer/dsl/swt/sync_exec_expression.rb +0 -15
  58. data/lib/glimmer/dsl/swt/tab_item_expression.rb +0 -33
  59. data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +0 -31
  60. data/lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb +0 -31
  61. data/lib/glimmer/dsl/swt/tree_properties_expression.rb +0 -26
  62. data/lib/glimmer/dsl/swt/widget_expression.rb +0 -34
  63. data/lib/glimmer/dsl/swt/widget_listener_expression.rb +0 -32
  64. data/lib/glimmer/dsl/xml/dsl.rb +0 -11
  65. data/lib/glimmer/dsl/xml/html_expression.rb +0 -25
  66. data/lib/glimmer/dsl/xml/meta_expression.rb +0 -23
  67. data/lib/glimmer/dsl/xml/name_space_expression.rb +0 -37
  68. data/lib/glimmer/dsl/xml/node_parent_expression.rb +0 -33
  69. data/lib/glimmer/dsl/xml/tag_expression.rb +0 -29
  70. data/lib/glimmer/dsl/xml/text_expression.rb +0 -22
  71. data/lib/glimmer/dsl/xml/xml_expression.rb +0 -21
  72. data/lib/glimmer/launcher.rb +0 -199
  73. data/lib/glimmer/package.rb +0 -7
  74. data/lib/glimmer/rake_task.rb +0 -89
  75. data/lib/glimmer/scaffold.rb +0 -582
  76. data/lib/glimmer/swt/color_proxy.rb +0 -53
  77. data/lib/glimmer/swt/display_proxy.rb +0 -88
  78. data/lib/glimmer/swt/font_proxy.rb +0 -72
  79. data/lib/glimmer/swt/layout_data_proxy.rb +0 -84
  80. data/lib/glimmer/swt/layout_proxy.rb +0 -82
  81. data/lib/glimmer/swt/menu_proxy.rb +0 -101
  82. data/lib/glimmer/swt/packages.rb +0 -13
  83. data/lib/glimmer/swt/shell_proxy.rb +0 -157
  84. data/lib/glimmer/swt/swt_proxy.rb +0 -106
  85. data/lib/glimmer/swt/tab_item_proxy.rb +0 -65
  86. data/lib/glimmer/swt/tree_proxy.rb +0 -120
  87. data/lib/glimmer/swt/widget_listener_proxy.rb +0 -34
  88. data/lib/glimmer/swt/widget_proxy.rb +0 -489
  89. data/lib/glimmer/ui/custom_shell.rb +0 -45
  90. data/lib/glimmer/ui/custom_widget.rb +0 -244
  91. data/lib/glimmer/util/proc_tracker.rb +0 -16
  92. data/lib/glimmer/xml/depth_first_search_iterator.rb +0 -22
  93. data/lib/glimmer/xml/name_space_visitor.rb +0 -21
  94. data/lib/glimmer/xml/node.rb +0 -75
  95. data/lib/glimmer/xml/node_visitor.rb +0 -13
  96. data/lib/glimmer/xml/xml_visitor.rb +0 -65
  97. data/vendor/swt/linux/swt.jar +0 -0
  98. data/vendor/swt/mac/swt.jar +0 -0
  99. data/vendor/swt/windows/swt.jar +0 -0
@@ -1 +0,0 @@
1
- jruby-9.2.11.1
data/bin/girb DELETED
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- trap "SIGINT" do
4
- # No Op for irb
5
- end
6
-
7
- require_relative '../lib/glimmer/launcher'
8
-
9
- girb_runner = File.expand_path('../girb_runner.rb', __FILE__)
10
- Glimmer::Launcher.new(["irb -r #{girb_runner}"] + ARGV).launch
@@ -1,13 +0,0 @@
1
- require 'puts_debuggerer'
2
-
3
- include Glimmer
4
-
5
- # Hijack Shell#start_event_loop default behavior to ensure disposing a display upon closing a shell inside girb
6
-
7
- Glimmer::SWT::ShellProxy.class_eval do
8
- alias start_event_loop_original start_event_loop
9
- def start_event_loop
10
- start_event_loop_original
11
- Glimmer::SWT::DisplayProxy.instance.dispose
12
- end
13
- end
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require_relative '../lib/glimmer/launcher'
4
-
5
- Glimmer::Launcher.new(ARGV).launch
Binary file
@@ -1,25 +0,0 @@
1
- module Glimmer
2
- module CSS
3
- class Rule
4
- attr_reader :selector, :properties
5
-
6
- def initialize(selector)
7
- @selector = selector
8
- @properties = {}
9
- end
10
-
11
- def add_property(keyword, *args)
12
- keyword = keyword.to_s.downcase.gsub('_', '-')
13
- @properties[keyword] = args.first
14
- end
15
-
16
- def to_css
17
- css = "#{@selector}{"
18
- css << @properties.map { |name, value| "#{name}:#{value}" }.join(';')
19
- css << "}"
20
- end
21
-
22
- alias to_s to_css
23
- end
24
- end
25
- end
@@ -1,19 +0,0 @@
1
- require 'glimmer/css/rule'
2
-
3
- module Glimmer
4
- module CSS
5
- class StyleSheet
6
- attr_reader :rules
7
-
8
- def initialize
9
- @rules = []
10
- end
11
-
12
- def to_css
13
- rules.map(&:to_css).join
14
- end
15
-
16
- alias to_s to_css
17
- end
18
- end
19
- end
@@ -1,52 +0,0 @@
1
- require 'glimmer'
2
- require 'glimmer/data_binding/observable'
3
- require 'glimmer/data_binding/observer'
4
-
5
- module Glimmer
6
- module DataBinding
7
- # SWT List widget selection binding
8
- class ListSelectionBinding
9
- include Glimmer
10
- include Observable
11
- include Observer
12
-
13
- attr_reader :widget_proxy
14
-
15
- PROPERTY_TYPE_UPDATERS = {
16
- :string => lambda { |widget_proxy, value| widget_proxy.swt_widget.select(widget_proxy.swt_widget.index_of(value.to_s)) },
17
- :array => lambda { |widget_proxy, value| widget_proxy.swt_widget.selection=(value || []).to_java(:string) }
18
- }
19
-
20
- PROPERTY_EVALUATORS = {
21
- :string => lambda do |selection_array|
22
- return nil if selection_array.empty?
23
- selection_array[0]
24
- end,
25
- :array => lambda do |selection_array|
26
- selection_array
27
- end
28
- }
29
-
30
- # Initialize with list widget and property_type
31
- # property_type :string represents default list single selection
32
- # property_type :array represents list multi selection
33
- def initialize(widget_proxy, property_type)
34
- property_type = :string if property_type.nil? or property_type == :undefined
35
- @widget_proxy = widget_proxy
36
- @property_type = property_type
37
- @widget_proxy.on_widget_disposed do |dispose_event|
38
- unregister_all_observables
39
- end
40
- end
41
-
42
- def call(value)
43
- PROPERTY_TYPE_UPDATERS[@property_type].call(@widget_proxy, value) unless evaluate_property == value
44
- end
45
-
46
- def evaluate_property
47
- selection_array = @widget_proxy.swt_widget.send('selection').to_a #TODO refactor send('selection') into proper method invocation
48
- PROPERTY_EVALUATORS[@property_type].call(selection_array)
49
- end
50
- end
51
- end
52
- end
@@ -1,17 +0,0 @@
1
- module Glimmer
2
- module DataBinding
3
- module ObservableWidget
4
- # TODO see if it is worth it to eliminate duplication of method_missing
5
- # from WidgetProxy using a module
6
-
7
- def method_missing(method, *args, &block)
8
- method_name = method.to_s
9
- if can_handle_observation_request?(method_name)
10
- handle_observation_request(method_name, &block)
11
- else
12
- super
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,23 +0,0 @@
1
- ## NOTE: Unsupported in Ruby 2 syntax
2
- #
3
- # require File.dirname(__FILE__) + "/glimmer"
4
- #
5
- # class Array
6
- # include Glimmer
7
- #
8
- # alias original_compare <=>
9
- #
10
- # def <=>(other)
11
- # if (self[0].class.name == "WidgetProxy")
12
- # content(self[0]) {
13
- # if (other.size == 2)
14
- # eval("#{self[1]} bind (other[0], other[1])")
15
- # elsif (other.size == 3)
16
- # eval("#{self[1]} bind (other[0], other[1], other[2])")
17
- # end
18
- # }
19
- # else
20
- # original_compare(other)
21
- # end
22
- # end
23
- # end
@@ -1,47 +0,0 @@
1
- require 'glimmer/data_binding/observable_array'
2
- require 'glimmer/data_binding/observable_model'
3
- require 'glimmer/data_binding/observable'
4
- require 'glimmer/data_binding/observer'
5
- require 'glimmer/swt/swt_proxy'
6
-
7
- module Glimmer
8
- module DataBinding
9
- class TableItemsBinding
10
- include DataBinding::Observable
11
- include DataBinding::Observer
12
- include_package 'org.eclipse.swt'
13
- include_package 'org.eclipse.swt.widgets'
14
-
15
- def initialize(parent, model_binding, column_properties)
16
- @table = parent
17
- @model_binding = model_binding
18
- @column_properties = column_properties
19
- call(@model_binding.evaluate_property)
20
- model = model_binding.base_model
21
- observe(model, model_binding.property_name_expression)
22
- @table.on_widget_disposed do |dispose_event|
23
- unregister_all_observables
24
- end
25
- end
26
-
27
- def call(model_collection=nil)
28
- if model_collection and model_collection.is_a?(Array)
29
- # TODO clean observer registrations
30
- observe(model_collection, @column_properties)
31
- @model_collection = model_collection
32
- end
33
- populate_table(@model_collection, @table, @column_properties)
34
- end
35
-
36
- def populate_table(model_collection, parent, column_properties)
37
- parent.swt_widget.removeAll
38
- model_collection.each do |model|
39
- table_item = TableItem.new(parent.swt_widget, SWT::SWTProxy[:none])
40
- for index in 0..(column_properties.size-1)
41
- table_item.setText(index, model.send(column_properties[index]).to_s)
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,71 +0,0 @@
1
- require 'glimmer/data_binding/observable_array'
2
- require 'glimmer/data_binding/observable_model'
3
- require 'glimmer/data_binding/observable'
4
- require 'glimmer/data_binding/observer'
5
- require 'glimmer/swt/swt_proxy'
6
-
7
- module Glimmer
8
- module DataBinding
9
- class TreeItemsBinding
10
- include DataBinding::Observable
11
- include DataBinding::Observer
12
-
13
- include_package 'org.eclipse.swt'
14
- include_package 'org.eclipse.swt.widgets'
15
-
16
- def initialize(parent, model_binding, tree_properties)
17
- @tree = parent
18
- @model_binding = model_binding
19
- @tree_properties = [tree_properties].flatten.first.to_h
20
- if @tree.respond_to?(:tree_properties=)
21
- @tree.tree_properties = @tree_properties
22
- else # assume custom widget
23
- @tree.body_root.tree_properties = @tree_properties
24
- end
25
- call
26
- model = model_binding.base_model
27
- observe(model, model_binding.property_name_expression)
28
- @tree.on_widget_disposed do |dispose_event|
29
- unregister_all_observables
30
- end
31
- end
32
-
33
- def call(new_value=nil)
34
- @model_tree_root_node = @model_binding.evaluate_property
35
- populate_tree(@model_tree_root_node, @tree, @tree_properties)
36
- end
37
-
38
- def populate_tree(model_tree_root_node, parent, tree_properties)
39
- # TODO make it change things by delta instead of removing all
40
- selected_tree_item_model = parent.swt_widget.getSelection.map(&:getData).first
41
- old_tree_items = parent.all_tree_items
42
- old_tree_item_expansion_by_data = old_tree_items.reduce({}) {|hash, ti| hash.merge(ti.getData => ti.getExpanded)}
43
- old_tree_items.each do |tree_item|
44
- tree_item.getData('observer_registrations').each do |key, observer_registration|
45
- observer_registration.unregister
46
- end
47
- end
48
- parent.swt_widget.removeAll
49
- populate_tree_node(model_tree_root_node, parent.swt_widget, tree_properties)
50
- parent.all_tree_items.each { |ti| ti.setExpanded(!!old_tree_item_expansion_by_data[ti.getData]) }
51
- tree_item_to_select = parent.depth_first_search {|ti| ti.getData == selected_tree_item_model}
52
- parent.swt_widget.setSelection(tree_item_to_select)
53
- end
54
-
55
- def populate_tree_node(model_tree_node, parent, tree_properties)
56
- return if model_tree_node.nil?
57
- # TODO anticipate default tree properties if none were passed (like literal values text and children)
58
- tree_item = TreeItem.new(parent, SWT::SWTProxy[:none])
59
- observer_registrations = @tree_properties.reduce({}) do |hash, key_value_pair|
60
- hash.merge(key_value_pair.first => observe(model_tree_node, key_value_pair.last))
61
- end
62
- tree_item.setData('observer_registrations', observer_registrations)
63
- tree_item.setData(model_tree_node)
64
- tree_item.setText((model_tree_node && model_tree_node.send(tree_properties[:text])).to_s)
65
- [model_tree_node && model_tree_node.send(tree_properties[:children])].flatten.to_a.compact.each do |child|
66
- populate_tree_node(child, tree_item, tree_properties)
67
- end
68
- end
69
- end
70
- end
71
- end
@@ -1,33 +0,0 @@
1
- require 'glimmer'
2
- require_relative 'observable'
3
- require_relative 'observer'
4
-
5
- module Glimmer
6
- module DataBinding
7
- class WidgetBinding
8
- include Glimmer
9
- include Observable
10
- include Observer
11
-
12
- attr_reader :widget, :property
13
- def initialize(model, property, translator = nil)
14
- @widget = model
15
- @property = property
16
- @translator = translator || proc {|value| value}
17
-
18
- if @widget.respond_to?(:dispose)
19
- @widget.on_widget_disposed do |dispose_event|
20
- unregister_all_observables
21
- end
22
- end
23
- end
24
- def call(value)
25
- converted_value = translated_value = @translator.call(value)
26
- @widget.set_attribute(@property, converted_value) unless evaluate_property == converted_value
27
- end
28
- def evaluate_property
29
- @widget.get_attribute(@property)
30
- end
31
- end
32
- end
33
- end
@@ -1,21 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/dsl/top_level_expression'
3
- require 'glimmer/dsl/parent_expression'
4
- require 'glimmer/css/style_sheet'
5
-
6
- module Glimmer
7
- module DSL
8
- module CSS
9
- # This static html expression flips the DSL switch on for
10
- # XML DSL in Glimmer
11
- class CssExpression < StaticExpression
12
- include TopLevelExpression
13
- include ParentExpression
14
-
15
- def interpret(parent, keyword, *args, &block)
16
- Glimmer::CSS::StyleSheet.new
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,10 +0,0 @@
1
- require 'glimmer/dsl/engine'
2
- Dir[File.expand_path('../*_expression.rb', __FILE__)].each {|f| require f}
3
-
4
- Glimmer::DSL::Engine.add_dynamic_expressions(
5
- Glimmer::DSL::CSS,
6
- %w[
7
- rule
8
- dynamic_property
9
- ]
10
- )
@@ -1,12 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
- require 'glimmer/dsl/css/property_expression'
3
-
4
- module Glimmer
5
- module DSL
6
- module CSS
7
- class DynamicPropertyExpression < Expression
8
- include PropertyExpression
9
- end
10
- end
11
- end
12
- end
@@ -1,22 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
- require 'glimmer/css/rule'
3
-
4
- module Glimmer
5
- module DSL
6
- module CSS
7
- module PropertyExpression
8
- include ParentExpression
9
-
10
- def can_interpret?(parent, keyword, *args, &block)
11
- parent.is_a?(Glimmer::CSS::Rule) and
12
- !block_given? and
13
- !args.empty?
14
- end
15
-
16
- def interpret(parent, keyword, *args, &block)
17
- parent.add_property(keyword, *args)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/dsl/css/property_expression'
3
-
4
- module Glimmer
5
- module DSL
6
- module CSS
7
- # Static keyword 'pv' version of CSS DSL dynamic property expression
8
- class PVExpression < StaticExpression
9
- include PropertyExpression
10
-
11
- def interpret(parent, keyword, *args, &block)
12
- parent.add_property(args[0], args[1])
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,25 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
- require 'glimmer/css/style_sheet'
3
- require 'glimmer/css/rule'
4
-
5
- module Glimmer
6
- module DSL
7
- module CSS
8
- class RuleExpression < Expression
9
- include ParentExpression
10
-
11
- def can_interpret?(parent, keyword, *args, &block)
12
- parent.is_a?(Glimmer::CSS::StyleSheet) and
13
- block_given? and
14
- args.empty?
15
- end
16
-
17
- def interpret(parent, keyword, *args, &block)
18
- Glimmer::CSS::Rule.new(keyword.to_s.downcase).tap do |rule|
19
- parent.rules << rule
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end