glimmer 0.8.2 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +823 -297
  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 +12 -16
  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 -142
  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 -56
  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/message_box_expression.rb +0 -29
  52. data/lib/glimmer/dsl/swt/observe_expression.rb +0 -32
  53. data/lib/glimmer/dsl/swt/property_expression.rb +0 -22
  54. data/lib/glimmer/dsl/swt/rgb_expression.rb +0 -12
  55. data/lib/glimmer/dsl/swt/rgba_expression.rb +0 -12
  56. data/lib/glimmer/dsl/swt/shell_expression.rb +0 -25
  57. data/lib/glimmer/dsl/swt/swt_expression.rb +0 -25
  58. data/lib/glimmer/dsl/swt/sync_exec_expression.rb +0 -15
  59. data/lib/glimmer/dsl/swt/tab_item_expression.rb +0 -33
  60. data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +0 -31
  61. data/lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb +0 -31
  62. data/lib/glimmer/dsl/swt/tree_properties_expression.rb +0 -26
  63. data/lib/glimmer/dsl/swt/widget_expression.rb +0 -35
  64. data/lib/glimmer/dsl/swt/widget_listener_expression.rb +0 -32
  65. data/lib/glimmer/dsl/xml/dsl.rb +0 -11
  66. data/lib/glimmer/dsl/xml/html_expression.rb +0 -25
  67. data/lib/glimmer/dsl/xml/meta_expression.rb +0 -23
  68. data/lib/glimmer/dsl/xml/name_space_expression.rb +0 -37
  69. data/lib/glimmer/dsl/xml/node_parent_expression.rb +0 -33
  70. data/lib/glimmer/dsl/xml/tag_expression.rb +0 -29
  71. data/lib/glimmer/dsl/xml/text_expression.rb +0 -22
  72. data/lib/glimmer/dsl/xml/xml_expression.rb +0 -21
  73. data/lib/glimmer/launcher.rb +0 -199
  74. data/lib/glimmer/package.rb +0 -55
  75. data/lib/glimmer/rake_task.rb +0 -58
  76. data/lib/glimmer/scaffold.rb +0 -582
  77. data/lib/glimmer/swt/color_proxy.rb +0 -53
  78. data/lib/glimmer/swt/display_proxy.rb +0 -88
  79. data/lib/glimmer/swt/font_proxy.rb +0 -72
  80. data/lib/glimmer/swt/layout_data_proxy.rb +0 -84
  81. data/lib/glimmer/swt/layout_proxy.rb +0 -82
  82. data/lib/glimmer/swt/menu_proxy.rb +0 -101
  83. data/lib/glimmer/swt/message_box_proxy.rb +0 -48
  84. data/lib/glimmer/swt/packages.rb +0 -13
  85. data/lib/glimmer/swt/shell_proxy.rb +0 -152
  86. data/lib/glimmer/swt/swt_proxy.rb +0 -106
  87. data/lib/glimmer/swt/tab_item_proxy.rb +0 -65
  88. data/lib/glimmer/swt/table_proxy.rb +0 -150
  89. data/lib/glimmer/swt/tree_proxy.rb +0 -120
  90. data/lib/glimmer/swt/widget_listener_proxy.rb +0 -34
  91. data/lib/glimmer/swt/widget_proxy.rb +0 -489
  92. data/lib/glimmer/ui/custom_shell.rb +0 -45
  93. data/lib/glimmer/ui/custom_widget.rb +0 -244
  94. data/lib/glimmer/util/proc_tracker.rb +0 -16
  95. data/lib/glimmer/xml/depth_first_search_iterator.rb +0 -22
  96. data/lib/glimmer/xml/name_space_visitor.rb +0 -21
  97. data/lib/glimmer/xml/node.rb +0 -75
  98. data/lib/glimmer/xml/node_visitor.rb +0 -13
  99. data/lib/glimmer/xml/xml_visitor.rb +0 -65
  100. data/vendor/swt/linux/swt.jar +0 -0
  101. data/vendor/swt/mac/swt.jar +0 -0
  102. data/vendor/swt/windows/swt.jar +0 -0
@@ -1,22 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
-
3
- module Glimmer
4
- module DSL
5
- module SWT
6
- class PropertyExpression < Expression
7
- def can_interpret?(parent, keyword, *args, &block)
8
- block.nil? and
9
- args.size > 0 and
10
- parent.respond_to?(:set_attribute) and
11
- parent.respond_to?(:has_attribute?) and
12
- parent.has_attribute?(keyword, *args)
13
- end
14
-
15
- def interpret(parent, keyword, *args, &block)
16
- parent.set_attribute(keyword, *args)
17
- nil
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,12 +0,0 @@
1
- require 'glimmer/dsl/swt/color_expression'
2
- require 'glimmer/swt/color_proxy'
3
- require 'glimmer/swt/display_proxy'
4
-
5
- module Glimmer
6
- module DSL
7
- module SWT
8
- class RgbExpression < ColorExpression
9
- end
10
- end
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- require 'glimmer/dsl/swt/color_expression'
2
- require 'glimmer/swt/color_proxy'
3
- require 'glimmer/swt/display_proxy'
4
-
5
- module Glimmer
6
- module DSL
7
- module SWT
8
- class RgbaExpression < ColorExpression
9
- end
10
- end
11
- end
12
- end
@@ -1,25 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/dsl/parent_expression'
3
- require 'glimmer/dsl/top_level_expression'
4
- require 'glimmer/swt/shell_proxy'
5
-
6
- module Glimmer
7
- module DSL
8
- module SWT
9
- class ShellExpression < StaticExpression
10
- include TopLevelExpression
11
- include ParentExpression
12
-
13
- def can_interpret?(parent, keyword, *args, &block)
14
- keyword == 'shell' and
15
- (parent.nil? or parent.is_a?(Glimmer::SWT::ShellProxy))
16
- end
17
-
18
- def interpret(parent, keyword, *args, &block)
19
- args = [parent] + args unless parent.nil?
20
- Glimmer::SWT::ShellProxy.send(:new, *args)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,25 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/swt/swt_proxy'
3
-
4
- # TODO consider turning static keywords like bind into methods
5
-
6
- module Glimmer
7
- module DSL
8
- module SWT
9
- # Responsible for returning SWT constant values
10
- #
11
- # Named SwtExpression (not SWTExpression) so that the DSL engine
12
- # discovers quickly by convention
13
- class SwtExpression < StaticExpression
14
- def can_interpret?(parent, keyword, *args, &block)
15
- block.nil? &&
16
- args.size > 0
17
- end
18
-
19
- def interpret(parent, keyword, *args, &block)
20
- Glimmer::SWT::SWTProxy[*args]
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,15 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/dsl/swt/exec_expression'
3
-
4
- module Glimmer
5
- module DSL
6
- module SWT
7
- # Synchronously executes code block against the SWT Event Loop
8
- # to manipulate SWT UI objects on the UI thread safely with
9
- # immediate priority when needed.
10
- class SyncExecExpression < StaticExpression
11
- include ExecExpression
12
- end
13
- end
14
- end
15
- end
@@ -1,33 +0,0 @@
1
- require 'glimmer'
2
- require 'glimmer/dsl/static_expression'
3
- require 'glimmer/dsl/parent_expression'
4
- require 'glimmer/swt/widget_proxy'
5
- require 'glimmer/swt/tab_item_proxy'
6
-
7
- module Glimmer
8
- module DSL
9
- module SWT
10
- class TabItemExpression < StaticExpression
11
- include ParentExpression
12
-
13
- include_package 'org.eclipse.swt.widgets'
14
-
15
- def can_interpret?(parent, keyword, *args, &block)
16
- initial_condition = (keyword == 'tab_item') and widget?(parent)
17
- if initial_condition
18
- if parent.swt_widget.is_a?(TabFolder)
19
- return true
20
- else
21
- Glimmer::Config.logger&.error "tab_item widget may only be used directly under a tab_folder widget!"
22
- end
23
- end
24
- false
25
- end
26
-
27
- def interpret(parent, keyword, *args, &block)
28
- Glimmer::SWT::TabItemProxy.new(parent, args)
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,31 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
- require 'glimmer/data_binding/model_binding'
3
- require 'glimmer/data_binding/table_items_binding'
4
-
5
- module Glimmer
6
- module DSL
7
- module SWT
8
- #Depends on BindCommandHandler and TableColumnPropertiesDataBindingCommandHandler
9
- class TableItemsDataBindingExpression < Expression
10
- include_package 'org.eclipse.swt.widgets'
11
-
12
- def can_interpret?(parent, keyword, *args, &block)
13
- keyword == "items" and
14
- block.nil? and
15
- widget?(parent) and
16
- parent.swt_widget.is_a?(Table) and
17
- args.size == 2 and
18
- args[0].is_a?(DataBinding::ModelBinding) and
19
- args[0].evaluate_property.is_a?(Array) and
20
- args[1].is_a?(Array)
21
- end
22
-
23
- def interpret(parent, keyword, *args, &block)
24
- model_binding = args[0]
25
- column_properties = args[1]
26
- DataBinding::TableItemsBinding.new(parent, model_binding, column_properties)
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,31 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
- require 'glimmer/data_binding/model_binding'
3
- require 'glimmer/data_binding/tree_items_binding'
4
-
5
- module Glimmer
6
- module DSL
7
- module SWT
8
- class TreeItemsDataBindingExpression < Expression
9
- include_package 'org.eclipse.swt.widgets'
10
-
11
- def can_interpret?(parent, keyword, *args, &block)
12
- initial_condition = ((keyword == "items") and block.nil? and widget?(parent) and parent.swt_widget.is_a?(Tree))
13
- return false unless initial_condition
14
- raise Glimmer::Error, 'Tree items args must be 2' unless args.size == 2
15
- raise Glimmer::Error, 'Tree items first arg must be a bind expression' unless args[0].is_a?(DataBinding::ModelBinding)
16
- raise Glimmer::Error, 'Tree items data-binding initial value must not be an array yet a single item representing tree root' unless !args[0].evaluate_property.is_a?(Array)
17
- raise Glimmer::Error, 'Tree items second arg must be an array' unless args[1].is_a?(Array)
18
- raise Glimmer::Error, 'Tree items second arg must not be empty' unless !args[1].empty?
19
- raise Glimmer::Error, 'Tree items second arg array elements must be of type hash' unless args[1].first.is_a?(Hash)
20
- true
21
- end
22
-
23
- def interpret(parent, keyword, *args, &block)
24
- model_binding = args[0]
25
- tree_properties = args[1]
26
- DataBinding::TreeItemsBinding.new(parent, model_binding, tree_properties)
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,26 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/data_binding/model_binding'
3
- require 'glimmer/data_binding/tree_items_binding'
4
-
5
- module Glimmer
6
- module DSL
7
- module SWT
8
- # Responsible for providing a readable keyword (command symbol) to capture
9
- # and return tree properties for use in TreeItemsDataBindingCommandHandler
10
- class TreePropertiesExpression < StaticExpression
11
- include_package 'org.eclipse.swt.widgets'
12
-
13
- def can_interpret?(parent, keyword, *args, &block)
14
- keyword == "tree_properties" and
15
- block.nil? and
16
- widget?(parent) and
17
- parent.swt_widget.is_a?(Tree)
18
- end
19
-
20
- def interpret(parent, keyword, *args, &block)
21
- args
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,35 +0,0 @@
1
- require 'glimmer'
2
- require 'glimmer/dsl/expression'
3
- require 'glimmer/dsl/parent_expression'
4
-
5
- module Glimmer
6
- module DSL
7
- module SWT
8
- class WidgetExpression < Expression
9
- include ParentExpression
10
-
11
- EXCLUDED_KEYWORDS = %w[shell display tab_item]
12
-
13
- def can_interpret?(parent, keyword, *args, &block)
14
- !EXCLUDED_KEYWORDS.include?(keyword) and
15
- widget?(parent) and #TODO change to composite?(parent)
16
- Glimmer::SWT::WidgetProxy.widget_exists?(keyword)
17
- end
18
-
19
- def interpret(parent, keyword, *args, &block)
20
- begin
21
- class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
22
- widget_class = Glimmer::SWT.const_get(class_name)
23
- rescue
24
- widget_class = Glimmer::SWT::WidgetProxy
25
- end
26
- widget_class.new(keyword, parent, args)
27
- end
28
- end
29
- end
30
- end
31
- end
32
-
33
- require 'glimmer/swt/widget_proxy'
34
- require 'glimmer/swt/tree_proxy'
35
- require 'glimmer/swt/table_proxy'
@@ -1,32 +0,0 @@
1
- require 'glimmer/dsl/expression'
2
- require 'glimmer/swt/display_proxy'
3
-
4
- module Glimmer
5
- module DSL
6
- module SWT
7
- class WidgetListenerExpression < Expression
8
- include_package 'org.eclipse.swt.widgets'
9
-
10
- def can_interpret?(parent, keyword, *args, &block)
11
- Glimmer::Config.logger&.debug "keyword starts with on_: #{keyword.start_with?('on_')}"
12
- return false unless keyword.start_with?('on_')
13
- widget_or_display_parentage = widget?(parent) || parent.is_a?(Glimmer::SWT::DisplayProxy)
14
- Glimmer::Config.logger&.debug "parent is a widget or display: #{widget_or_display_parentage}"
15
- return false unless widget_or_display_parentage
16
- Glimmer::Config.logger&.debug "block exists?: #{!block.nil?}"
17
- raise Glimmer::Error, "Listener is missing block for keyword: #{keyword}" unless block_given?
18
- Glimmer::Config.logger&.debug "args are empty?: #{args.empty?}"
19
- raise Glimmer::Error, "Invalid listener arguments for keyword: #{keyword}(#{args})" unless args.empty?
20
- result = parent.can_handle_observation_request?(keyword)
21
- Glimmer::Config.logger&.debug "can add listener? #{result}"
22
- raise Glimmer::Error, "Invalid listener keyword: #{keyword}" unless result
23
- true
24
- end
25
-
26
- def interpret(parent, keyword, *args, &block)
27
- parent.handle_observation_request(keyword, &block)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,11 +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::XML,
6
- %w[
7
- text
8
- tag
9
- xml
10
- ]
11
- )
@@ -1,25 +0,0 @@
1
- require 'glimmer/dsl/xml/node_parent_expression'
2
- require 'glimmer/dsl/xml/xml_expression'
3
- require 'glimmer/dsl/static_expression'
4
- require 'glimmer/dsl/top_level_expression'
5
-
6
- module Glimmer
7
- module DSL
8
- module XML
9
- # This static html expression flips the DSL switch on for
10
- # XML DSL in Glimmer
11
- class HtmlExpression < StaticExpression
12
- include TopLevelExpression
13
- include NodeParentExpression
14
-
15
- def interpret(parent, keyword, *args, &block)
16
- xml_expression.interpret(parent, keyword, *args, &block)
17
- end
18
-
19
- def xml_expression
20
- @xml_expression ||= XmlExpression.new
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,23 +0,0 @@
1
- require 'glimmer/dsl/xml/node_parent_expression'
2
- require 'glimmer/dsl/xml/xml_expression'
3
- require 'glimmer/dsl/static_expression'
4
-
5
- module Glimmer
6
- module DSL
7
- module XML
8
- # This static html expression flips the DSL switch on for
9
- # XML DSL in Glimmer
10
- class MetaExpression < StaticExpression
11
- include NodeParentExpression
12
-
13
- def interpret(parent, keyword, *args, &block)
14
- xml_expression.interpret(parent, keyword, *args, &block)
15
- end
16
-
17
- def xml_expression
18
- @xml_expression ||= XmlExpression.new
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,37 +0,0 @@
1
- require 'glimmer/dsl/static_expression'
2
- require 'glimmer/dsl/top_level_expression'
3
- require 'glimmer/xml/node'
4
- require 'glimmer/xml/depth_first_search_iterator'
5
- require 'glimmer/xml/name_space_visitor'
6
-
7
- module Glimmer
8
- module DSL
9
- module XML
10
- class NameSpaceExpression < StaticExpression
11
- include TopLevelExpression
12
-
13
- def can_interpret?(parent, keyword, *args, &block)
14
- (parent == nil or parent.is_a?(Glimmer::XML::Node)) and
15
- (keyword.to_s == "name_space")
16
- (args.size == 1) and
17
- (args[0].is_a?(Symbol)) and
18
- block
19
- end
20
-
21
- def interpret(parent, keyword, *args, &block)
22
- node = block.call
23
- unless node.is_a?(String)
24
- name_space_visitor = Glimmer::XML::NameSpaceVisitor.new(args[0].to_s)
25
- Glimmer::XML::DepthFirstSearchIterator.new(node, name_space_visitor).iterate
26
- def node.process_block(block)
27
- Glimmer::Config.logger&.debug 'block'
28
- #NOOP
29
- end
30
- end
31
- parent.children << node if parent and !parent.children.include?(node)
32
- node
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,33 +0,0 @@
1
- require 'glimmer'
2
- require 'glimmer/dsl/parent_expression'
3
- require 'glimmer/xml/node'
4
-
5
- module Glimmer
6
- module DSL
7
- module XML
8
- module NodeParentExpression
9
- include ParentExpression
10
- include Glimmer
11
-
12
- def add_content(parent, &block)
13
- return_value = block.call(parent)
14
- if !return_value.is_a?(Glimmer::XML::Node) and !parent.children.include?(return_value)
15
- text = return_value.to_s
16
- first_match = text.match(/[#][^{]+[{][^}]+[}]/)
17
- match = first_match
18
- while (match)
19
- instance_eval(parent.text_command(match.pre_match))
20
- tag_text = match.to_s
21
- instance_eval(parent.rubyize(tag_text))
22
- text = tag_text
23
- post_match = match.post_match
24
- match = text.match(/[#]\w+[{]\w+[}]/)
25
- end
26
- instance_eval(parent.text_command(post_match)) if post_match
27
- parent.children << return_value unless first_match
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end