glimmer 0.8.2 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +823 -297
- data/VERSION +1 -1
- data/lib/glimmer.rb +35 -21
- data/lib/glimmer/config.rb +7 -12
- data/lib/glimmer/data_binding/observable_array.rb +32 -53
- data/lib/glimmer/data_binding/observable_model.rb +12 -16
- data/lib/glimmer/data_binding/observer.rb +3 -0
- data/lib/glimmer/dsl/engine.rb +58 -27
- data/lib/glimmer/dsl/expression.rb +0 -7
- data/lib/glimmer/dsl/static_expression.rb +2 -2
- data/lib/glimmer/excluded_keyword_error.rb +5 -0
- metadata +60 -142
- data/RUBY_VERSION +0 -1
- data/bin/girb +0 -10
- data/bin/girb_runner.rb +0 -13
- data/bin/glimmer +0 -5
- data/icons/scaffold_app.icns +0 -0
- data/lib/glimmer/css/rule.rb +0 -25
- data/lib/glimmer/css/style_sheet.rb +0 -19
- data/lib/glimmer/data_binding/list_selection_binding.rb +0 -52
- data/lib/glimmer/data_binding/observable_widget.rb +0 -17
- data/lib/glimmer/data_binding/shine.rb +0 -23
- data/lib/glimmer/data_binding/table_items_binding.rb +0 -56
- data/lib/glimmer/data_binding/tree_items_binding.rb +0 -71
- data/lib/glimmer/data_binding/widget_binding.rb +0 -33
- data/lib/glimmer/dsl/css/css_expression.rb +0 -21
- data/lib/glimmer/dsl/css/dsl.rb +0 -10
- data/lib/glimmer/dsl/css/dynamic_property_expression.rb +0 -12
- data/lib/glimmer/dsl/css/property_expression.rb +0 -22
- data/lib/glimmer/dsl/css/pv_expression.rb +0 -17
- data/lib/glimmer/dsl/css/rule_expression.rb +0 -25
- data/lib/glimmer/dsl/css/s_expression.rb +0 -26
- data/lib/glimmer/dsl/swt/async_exec_expression.rb +0 -14
- data/lib/glimmer/dsl/swt/bind_expression.rb +0 -37
- data/lib/glimmer/dsl/swt/color_expression.rb +0 -19
- data/lib/glimmer/dsl/swt/column_properties_expression.rb +0 -24
- data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +0 -42
- data/lib/glimmer/dsl/swt/custom_widget_expression.rb +0 -36
- data/lib/glimmer/dsl/swt/data_binding_expression.rb +0 -34
- data/lib/glimmer/dsl/swt/dialog_expression.rb +0 -26
- data/lib/glimmer/dsl/swt/display_expression.rb +0 -19
- data/lib/glimmer/dsl/swt/dsl.rb +0 -28
- data/lib/glimmer/dsl/swt/exec_expression.rb +0 -28
- data/lib/glimmer/dsl/swt/layout_data_expression.rb +0 -25
- data/lib/glimmer/dsl/swt/layout_expression.rb +0 -27
- data/lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb +0 -44
- data/lib/glimmer/dsl/swt/menu_bar_expression.rb +0 -33
- data/lib/glimmer/dsl/swt/menu_expression.rb +0 -32
- data/lib/glimmer/dsl/swt/message_box_expression.rb +0 -29
- data/lib/glimmer/dsl/swt/observe_expression.rb +0 -32
- data/lib/glimmer/dsl/swt/property_expression.rb +0 -22
- data/lib/glimmer/dsl/swt/rgb_expression.rb +0 -12
- data/lib/glimmer/dsl/swt/rgba_expression.rb +0 -12
- data/lib/glimmer/dsl/swt/shell_expression.rb +0 -25
- data/lib/glimmer/dsl/swt/swt_expression.rb +0 -25
- data/lib/glimmer/dsl/swt/sync_exec_expression.rb +0 -15
- data/lib/glimmer/dsl/swt/tab_item_expression.rb +0 -33
- data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +0 -31
- data/lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb +0 -31
- data/lib/glimmer/dsl/swt/tree_properties_expression.rb +0 -26
- data/lib/glimmer/dsl/swt/widget_expression.rb +0 -35
- data/lib/glimmer/dsl/swt/widget_listener_expression.rb +0 -32
- data/lib/glimmer/dsl/xml/dsl.rb +0 -11
- data/lib/glimmer/dsl/xml/html_expression.rb +0 -25
- data/lib/glimmer/dsl/xml/meta_expression.rb +0 -23
- data/lib/glimmer/dsl/xml/name_space_expression.rb +0 -37
- data/lib/glimmer/dsl/xml/node_parent_expression.rb +0 -33
- data/lib/glimmer/dsl/xml/tag_expression.rb +0 -29
- data/lib/glimmer/dsl/xml/text_expression.rb +0 -22
- data/lib/glimmer/dsl/xml/xml_expression.rb +0 -21
- data/lib/glimmer/launcher.rb +0 -199
- data/lib/glimmer/package.rb +0 -55
- data/lib/glimmer/rake_task.rb +0 -58
- data/lib/glimmer/scaffold.rb +0 -582
- data/lib/glimmer/swt/color_proxy.rb +0 -53
- data/lib/glimmer/swt/display_proxy.rb +0 -88
- data/lib/glimmer/swt/font_proxy.rb +0 -72
- data/lib/glimmer/swt/layout_data_proxy.rb +0 -84
- data/lib/glimmer/swt/layout_proxy.rb +0 -82
- data/lib/glimmer/swt/menu_proxy.rb +0 -101
- data/lib/glimmer/swt/message_box_proxy.rb +0 -48
- data/lib/glimmer/swt/packages.rb +0 -13
- data/lib/glimmer/swt/shell_proxy.rb +0 -152
- data/lib/glimmer/swt/swt_proxy.rb +0 -106
- data/lib/glimmer/swt/tab_item_proxy.rb +0 -65
- data/lib/glimmer/swt/table_proxy.rb +0 -150
- data/lib/glimmer/swt/tree_proxy.rb +0 -120
- data/lib/glimmer/swt/widget_listener_proxy.rb +0 -34
- data/lib/glimmer/swt/widget_proxy.rb +0 -489
- data/lib/glimmer/ui/custom_shell.rb +0 -45
- data/lib/glimmer/ui/custom_widget.rb +0 -244
- data/lib/glimmer/util/proc_tracker.rb +0 -16
- data/lib/glimmer/xml/depth_first_search_iterator.rb +0 -22
- data/lib/glimmer/xml/name_space_visitor.rb +0 -21
- data/lib/glimmer/xml/node.rb +0 -75
- data/lib/glimmer/xml/node_visitor.rb +0 -13
- data/lib/glimmer/xml/xml_visitor.rb +0 -65
- data/vendor/swt/linux/swt.jar +0 -0
- data/vendor/swt/mac/swt.jar +0 -0
- data/vendor/swt/windows/swt.jar +0 -0
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.9.4
|
data/lib/glimmer.rb
CHANGED
@@ -2,14 +2,12 @@
|
|
2
2
|
# interfaces using the robust platform-independent Eclipse SWT library. Glimmer
|
3
3
|
# comes with built-in data-binding support to greatly facilitate synchronizing
|
4
4
|
# UI with domain models.
|
5
|
-
require 'facets'
|
6
|
-
require 'super_module'
|
7
5
|
require 'logger'
|
8
|
-
require 'java'
|
9
6
|
require 'set'
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift(File.expand_path('..', __FILE__))
|
9
|
+
|
10
|
+
require 'glimmer/config'
|
13
11
|
|
14
12
|
# Glimmer provides a JRuby Desktop UI DSL + Data-Binding functionality
|
15
13
|
#
|
@@ -20,24 +18,45 @@ require 'os'
|
|
20
18
|
module Glimmer
|
21
19
|
#TODO make it configurable to include or not include perhaps reverting to using included
|
22
20
|
REGEX_METHODS_EXCLUDED = /^(to_|\[)/
|
23
|
-
|
21
|
+
|
22
|
+
# TODO add loop detection support to avoid infinite loops (perhaps breaks after 3 repetitions and provides an option to allow it if intentional)
|
24
23
|
class << self
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
attr_accessor :loop_last_data
|
25
|
+
|
26
|
+
def loop_reset!(including_loop_last_data = false)
|
27
|
+
@loop_last_data = nil if including_loop_last_data
|
28
|
+
@loop = 1
|
29
|
+
end
|
30
|
+
|
31
|
+
def loop
|
32
|
+
@loop ||= loop_reset!
|
33
|
+
end
|
34
|
+
|
35
|
+
def loop_increment!
|
36
|
+
@loop = loop + 1
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
34
40
|
def method_missing(method_symbol, *args, &block)
|
41
|
+
new_loop_data = [method_symbol, args, block]
|
42
|
+
if new_loop_data == Glimmer.loop_last_data
|
43
|
+
Glimmer.loop_increment!
|
44
|
+
if Glimmer.loop == Config.loop_max_count
|
45
|
+
raise "Glimmer looped #{Config.loop_max_count} times with keyword '#{new_loop_data[0]}'! Check code for errors."
|
46
|
+
end
|
47
|
+
else
|
48
|
+
Glimmer.loop_reset!
|
49
|
+
end
|
50
|
+
Glimmer.loop_last_data = new_loop_data
|
35
51
|
# This if statement speeds up Glimmer in girb or whenever directly including on main object
|
36
52
|
if method_symbol.to_s.match(REGEX_METHODS_EXCLUDED)
|
37
|
-
raise
|
53
|
+
raise ExcludedKeywordError, "Glimmer excluded keyword: #{method_symbol}"
|
38
54
|
end
|
39
55
|
Glimmer::Config.logger&.debug "Interpreting keyword: #{method_symbol}"
|
40
56
|
Glimmer::DSL::Engine.interpret(method_symbol, *args, &block)
|
57
|
+
rescue ExcludedKeywordError => e
|
58
|
+
# TODO add a feature to show excluded keywords optionally for debugging purposes
|
59
|
+
super(method_symbol, *args, &block)
|
41
60
|
rescue InvalidKeywordError => e
|
42
61
|
if !method_symbol.to_s.match(REGEX_METHODS_EXCLUDED)
|
43
62
|
Glimmer::Config.logger&.error e.message
|
@@ -47,12 +66,7 @@ module Glimmer
|
|
47
66
|
end
|
48
67
|
end
|
49
68
|
|
50
|
-
$LOAD_PATH.unshift(File.expand_path('..', __FILE__))
|
51
|
-
|
52
|
-
require 'glimmer/config'
|
53
|
-
require 'glimmer/swt/packages'
|
54
|
-
require 'glimmer/dsl/swt/dsl'
|
55
|
-
require 'glimmer/dsl/xml/dsl'
|
56
|
-
require 'glimmer/dsl/css/dsl'
|
57
69
|
require 'glimmer/error'
|
70
|
+
require 'glimmer/excluded_keyword_error'
|
58
71
|
require 'glimmer/invalid_keyword_error'
|
72
|
+
require 'glimmer/dsl/engine'
|
data/lib/glimmer/config.rb
CHANGED
@@ -1,19 +1,14 @@
|
|
1
1
|
module Glimmer
|
2
2
|
module Config
|
3
3
|
class << self
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
LOOP_MAX_COUNT_DEFAULT = 100
|
5
|
+
|
6
|
+
attr_writer :loop_max_count
|
7
|
+
|
8
|
+
def loop_max_count
|
9
|
+
@loop_max_count ||= LOOP_MAX_COUNT_DEFAULT
|
7
10
|
end
|
8
|
-
|
9
|
-
# Returns whether Glimmer will import SWT packages into including class
|
10
|
-
def import_swt_packages
|
11
|
-
unless defined? @@import_swt_packages
|
12
|
-
@@import_swt_packages = true
|
13
|
-
end
|
14
|
-
@@import_swt_packages
|
15
|
-
end
|
16
|
-
|
11
|
+
|
17
12
|
# Returns Glimmer logger (standard Ruby logger)
|
18
13
|
def logger
|
19
14
|
# unless defined? @@logger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'set'
|
2
2
|
|
3
|
-
|
3
|
+
require 'glimmer/data_binding/observable'
|
4
4
|
|
5
5
|
module Glimmer
|
6
6
|
module DataBinding
|
@@ -40,61 +40,40 @@ module Glimmer
|
|
40
40
|
def notify_observers
|
41
41
|
property_observer_list.each {|observer| observer.call}
|
42
42
|
end
|
43
|
-
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
end_eval
|
73
|
-
|
74
|
-
array.instance_eval("alias __original_delete_at delete_at")
|
75
|
-
array.instance_eval <<-end_eval, __FILE__, __LINE__
|
76
|
-
def delete_at(index)
|
77
|
-
old_value = self[index]
|
43
|
+
|
44
|
+
def <<(element)
|
45
|
+
super(element)
|
46
|
+
notify_observers
|
47
|
+
end
|
48
|
+
|
49
|
+
def []=(index, value)
|
50
|
+
old_value = self[index]
|
51
|
+
unregister_dependent_observers(old_value)
|
52
|
+
super(index, value)
|
53
|
+
notify_observers
|
54
|
+
end
|
55
|
+
|
56
|
+
def delete(element)
|
57
|
+
unregister_dependent_observers(element)
|
58
|
+
super(element)
|
59
|
+
notify_observers
|
60
|
+
end
|
61
|
+
|
62
|
+
def delete_at(index)
|
63
|
+
old_value = self[index]
|
64
|
+
unregister_dependent_observers(old_value)
|
65
|
+
super(index)
|
66
|
+
notify_observers
|
67
|
+
end
|
68
|
+
|
69
|
+
def clear
|
70
|
+
each do |old_value|
|
78
71
|
unregister_dependent_observers(old_value)
|
79
|
-
self.__original_delete_at(index)
|
80
|
-
notify_observers
|
81
72
|
end
|
82
|
-
|
83
|
-
|
84
|
-
array.instance_eval("alias __original_clear clear")
|
85
|
-
array.instance_eval <<-end_eval, __FILE__, __LINE__
|
86
|
-
def clear
|
87
|
-
each do |old_value|
|
88
|
-
unregister_dependent_observers(old_value)
|
89
|
-
end
|
90
|
-
self.__original_clear
|
91
|
-
notify_observers
|
92
|
-
end
|
93
|
-
end_eval
|
94
|
-
|
95
|
-
super
|
73
|
+
super()
|
74
|
+
notify_observers
|
96
75
|
end
|
97
|
-
|
76
|
+
|
98
77
|
def unregister_dependent_observers(old_value)
|
99
78
|
# TODO look into optimizing this
|
100
79
|
return unless old_value.is_a?(ObservableModel) || old_value.is_a?(ObservableArray)
|
@@ -1,7 +1,5 @@
|
|
1
|
-
require 'glimmer'
|
2
|
-
|
3
|
-
require_relative 'observable'
|
4
|
-
require_relative 'observer'
|
1
|
+
require 'glimmer/data_binding/observable'
|
2
|
+
require 'glimmer/data_binding/observer'
|
5
3
|
|
6
4
|
module Glimmer
|
7
5
|
module DataBinding
|
@@ -58,22 +56,20 @@ module Glimmer
|
|
58
56
|
method(property_writer_name)
|
59
57
|
ensure_array_object_observer(property_name, send(property_name))
|
60
58
|
begin
|
61
|
-
|
59
|
+
singleton_method("__original_#{property_writer_name}")
|
62
60
|
rescue
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
old_value
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
ensure_array_object_observer('#{property_name}', value, old_value)
|
61
|
+
old_method = self.class.instance_method(property_writer_name) rescue self.method(property_writer_name)
|
62
|
+
define_singleton_method("__original_#{property_writer_name}", old_method)
|
63
|
+
define_singleton_method(property_writer_name) do |value|
|
64
|
+
old_value = self.send(property_name)
|
65
|
+
unregister_dependent_observers(property_name, old_value)
|
66
|
+
self.send("__original_#{property_writer_name}", value)
|
67
|
+
notify_observers(property_name)
|
68
|
+
ensure_array_object_observer(property_name, value, old_value)
|
72
69
|
end
|
73
|
-
end_eval
|
74
70
|
end
|
75
71
|
rescue => e
|
76
|
-
#
|
72
|
+
#ignore writing if no property writer exists
|
77
73
|
Glimmer::Config.logger&.debug "No need to observe property writer: #{property_writer_name}\n#{e.message}\n#{e.backtrace.join("\n")}"
|
78
74
|
end
|
79
75
|
|
data/lib/glimmer/dsl/engine.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
require '
|
1
|
+
require 'facets/string/camelcase'
|
2
|
+
|
2
3
|
require 'glimmer/dsl/expression_handler'
|
3
4
|
|
4
5
|
module Glimmer
|
@@ -10,6 +11,8 @@ module Glimmer
|
|
10
11
|
# When DSL engine interprets an expression, it attempts to handle
|
11
12
|
# with ordered expression array specified via `.expressions=` method.
|
12
13
|
class Engine
|
14
|
+
MESSAGE_NO_DSLS = "Glimmer has no DSLs configured. Add glimmer-dsl-swt gem or visit https://github.com/AndyObtiva/glimmer#multi-dsl-support for more details.\n"
|
15
|
+
|
13
16
|
class << self
|
14
17
|
def dsl=(dsl_name)
|
15
18
|
dsl_name = dsl_name&.to_sym
|
@@ -55,6 +58,10 @@ module Glimmer
|
|
55
58
|
dsl_stack.clear
|
56
59
|
disabled_dsls.clear
|
57
60
|
end
|
61
|
+
|
62
|
+
def no_dsls?
|
63
|
+
static_expressions.empty? && dynamic_expression_chains_of_responsibility.empty?
|
64
|
+
end
|
58
65
|
|
59
66
|
# Dynamic expression chains of responsibility indexed by dsl
|
60
67
|
def dynamic_expression_chains_of_responsibility
|
@@ -64,6 +71,16 @@ module Glimmer
|
|
64
71
|
# Static expressions indexed by keyword and dsl
|
65
72
|
def static_expressions
|
66
73
|
@static_expressions ||= {}
|
74
|
+
end
|
75
|
+
|
76
|
+
# Sets dynamic expression chains of responsibility. Useful for internal testing
|
77
|
+
def dynamic_expression_chains_of_responsibility=(chains)
|
78
|
+
@dynamic_expression_chains_of_responsibility = chains
|
79
|
+
end
|
80
|
+
|
81
|
+
# Sets static expressions. Useful for internal testing
|
82
|
+
def static_expressions=(expressions)
|
83
|
+
@static_expressions = expressions
|
67
84
|
end
|
68
85
|
|
69
86
|
# Sets an ordered array of DSL expressions to support
|
@@ -73,8 +90,9 @@ module Glimmer
|
|
73
90
|
#
|
74
91
|
# They are used in order following the Chain of Responsibility Design
|
75
92
|
# Pattern when interpretting a DSL expression
|
76
|
-
def add_dynamic_expressions(dsl_namespace, expression_names)
|
77
|
-
|
93
|
+
def add_dynamic_expressions(dsl_namespace, *expression_names)
|
94
|
+
expression_names = expression_names.flatten
|
95
|
+
dsl = dsl_namespace.name.split("::").last.downcase.to_sym
|
78
96
|
dynamic_expression_chains_of_responsibility[dsl] = expression_names.reverse.map do |expression_name|
|
79
97
|
expression_class(dsl_namespace, expression_name).new
|
80
98
|
end.reduce(nil) do |last_expresion_handler, expression|
|
@@ -82,7 +100,7 @@ module Glimmer
|
|
82
100
|
expression_handler = ExpressionHandler.new(expression)
|
83
101
|
expression_handler.next = last_expresion_handler if last_expresion_handler
|
84
102
|
expression_handler
|
85
|
-
end
|
103
|
+
end
|
86
104
|
end
|
87
105
|
|
88
106
|
def add_static_expression(static_expression)
|
@@ -91,31 +109,40 @@ module Glimmer
|
|
91
109
|
static_expression_dsl = static_expression.class.dsl
|
92
110
|
static_expressions[keyword] ||= {}
|
93
111
|
static_expressions[keyword][static_expression_dsl] = static_expression
|
94
|
-
Glimmer.define_method
|
112
|
+
Glimmer.send(:define_method, keyword) do |*args, &block|
|
95
113
|
begin
|
96
|
-
|
97
|
-
|
98
|
-
if retrieved_static_expression.nil? && Glimmer::DSL::Engine.dsl && (static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression))
|
99
|
-
begin
|
100
|
-
return Glimmer::DSL::Engine.interpret(keyword, *args, &block)
|
101
|
-
rescue => e
|
102
|
-
Glimmer::DSL::Engine.reset
|
103
|
-
raise e if static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
raise Glimmer::Error, "Unsupported keyword: #{keyword}" unless static_expression_dsl || retrieved_static_expression
|
107
|
-
Glimmer::DSL::Engine.dsl_stack.push(static_expression_dsl || Glimmer::DSL::Engine.dsl)
|
108
|
-
static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
109
|
-
if !static_expression.can_interpret?(Glimmer::DSL::Engine.parent, keyword, *args, &block)
|
110
|
-
raise Error, "Invalid use of Glimmer keyword #{keyword} with args #{args} under parent #{Glimmer::DSL::Engine.parent}"
|
114
|
+
if Glimmer::DSL::Engine.no_dsls?
|
115
|
+
puts Glimmer::DSL::Engine::MESSAGE_NO_DSLS
|
111
116
|
else
|
112
|
-
Glimmer::
|
113
|
-
|
114
|
-
|
115
|
-
|
117
|
+
retrieved_static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
118
|
+
static_expression_dsl = (Glimmer::DSL::Engine.static_expressions[keyword].keys - Glimmer::DSL::Engine.disabled_dsls).first if retrieved_static_expression.nil?
|
119
|
+
interpretation = nil
|
120
|
+
if retrieved_static_expression.nil? && Glimmer::DSL::Engine.dsl && (static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression))
|
121
|
+
begin
|
122
|
+
interpretation = Glimmer::DSL::Engine.interpret(keyword, *args, &block)
|
123
|
+
rescue => e
|
124
|
+
Glimmer::DSL::Engine.reset
|
125
|
+
raise e if static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression)
|
126
|
+
end
|
116
127
|
end
|
117
|
-
|
118
|
-
|
128
|
+
if interpretation
|
129
|
+
interpretation
|
130
|
+
else
|
131
|
+
raise Glimmer::Error, "Unsupported keyword: #{keyword}" unless static_expression_dsl || retrieved_static_expression
|
132
|
+
Glimmer::DSL::Engine.dsl_stack.push(static_expression_dsl || Glimmer::DSL::Engine.dsl)
|
133
|
+
static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
134
|
+
if !static_expression.can_interpret?(Glimmer::DSL::Engine.parent, keyword, *args, &block)
|
135
|
+
raise Error, "Invalid use of Glimmer keyword #{keyword} with args #{args} under parent #{Glimmer::DSL::Engine.parent}"
|
136
|
+
else
|
137
|
+
Glimmer::Config.logger&.debug "#{static_expression.class.name} will handle expression keyword #{keyword}"
|
138
|
+
static_expression.interpret(Glimmer::DSL::Engine.parent, keyword, *args, &block).tap do |ui_object|
|
139
|
+
Glimmer::DSL::Engine.add_content(ui_object, static_expression, &block) unless block.nil?
|
140
|
+
Glimmer::DSL::Engine.dsl_stack.pop
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
rescue StandardError => e
|
119
146
|
# Glimmer::DSL::Engine.dsl_stack.pop
|
120
147
|
Glimmer::DSL::Engine.reset
|
121
148
|
raise e
|
@@ -133,6 +160,10 @@ module Glimmer
|
|
133
160
|
|
134
161
|
# Interprets Glimmer dynamic DSL expression consisting of keyword, args, and block (e.g. shell(:no_resize) { ... })
|
135
162
|
def interpret(keyword, *args, &block)
|
163
|
+
if no_dsls?
|
164
|
+
puts MESSAGE_NO_DSLS
|
165
|
+
return
|
166
|
+
end
|
136
167
|
keyword = keyword.to_s
|
137
168
|
dynamic_expression_dsl = (dynamic_expression_chains_of_responsibility.keys - disabled_dsls).first if dsl.nil?
|
138
169
|
dsl_stack.push(dynamic_expression_dsl || dsl)
|
@@ -141,7 +172,7 @@ module Glimmer
|
|
141
172
|
add_content(ui_object, expression, &block)
|
142
173
|
dsl_stack.pop
|
143
174
|
end
|
144
|
-
rescue => e
|
175
|
+
rescue StandardError => e
|
145
176
|
# dsl_stack.pop
|
146
177
|
reset
|
147
178
|
raise e
|
@@ -1,6 +1,4 @@
|
|
1
1
|
require 'glimmer/error'
|
2
|
-
require 'glimmer/swt/widget_proxy'
|
3
|
-
require 'glimmer/ui/custom_widget'
|
4
2
|
|
5
3
|
module Glimmer
|
6
4
|
module DSL
|
@@ -35,11 +33,6 @@ module Glimmer
|
|
35
33
|
# No Op by default
|
36
34
|
end
|
37
35
|
|
38
|
-
# Checks if parent object is a widget
|
39
|
-
def widget?(parent)
|
40
|
-
parent.is_a?(Glimmer::SWT::WidgetProxy) or parent.is_a?(Glimmer::UI::CustomWidget)
|
41
|
-
end
|
42
|
-
|
43
36
|
# Checks if object is a Symbol or a String
|
44
37
|
def textual?(object)
|
45
38
|
object.is_a?(Symbol) or object.is_a?(String)
|