glimmer-dsl-opal 0.7.5 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +182 -12
  4. data/VERSION +1 -1
  5. data/lib/glimmer-dsl-opal.rb +8 -0
  6. data/lib/glimmer-dsl-opal/ext/class.rb +10 -0
  7. data/lib/{file.rb → glimmer-dsl-opal/ext/file.rb} +0 -0
  8. data/lib/glimmer-dsl-opal/samples/hello/hello_browser.rb +23 -0
  9. data/lib/glimmer-dsl-opal/samples/hello/hello_computed.rb +27 -0
  10. data/lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb +62 -32
  11. data/lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb +47 -22
  12. data/lib/glimmer-dsl-opal/samples/hello/hello_message_box.rb +37 -0
  13. data/lib/glimmer-dsl-opal/samples/hello/hello_pop_up_context_menu.rb +84 -0
  14. data/lib/glimmer/data_binding/observable_element.rb +1 -1
  15. data/lib/glimmer/dsl/opal/custom_widget_expression.rb +1 -1
  16. data/lib/glimmer/dsl/opal/dsl.rb +2 -0
  17. data/lib/glimmer/dsl/opal/menu_bar_expression.rb +54 -0
  18. data/lib/glimmer/dsl/opal/menu_expression.rb +61 -0
  19. data/lib/glimmer/dsl/opal/widget_expression.rb +3 -2
  20. data/lib/glimmer/dsl/opal/widget_listener_expression.rb +2 -2
  21. data/lib/glimmer/swt/custom/checkbox_group.rb +2 -2
  22. data/lib/glimmer/swt/custom/radio_group.rb +2 -2
  23. data/lib/glimmer/swt/event_listener_proxy.rb +14 -4
  24. data/lib/glimmer/swt/grid_layout_proxy.rb +1 -0
  25. data/lib/glimmer/swt/label_proxy.rb +6 -3
  26. data/lib/glimmer/swt/list_proxy.rb +33 -0
  27. data/lib/glimmer/swt/menu_item_proxy.rb +87 -0
  28. data/lib/glimmer/swt/menu_proxy.rb +162 -0
  29. data/lib/glimmer/swt/message_box_proxy.rb +51 -57
  30. data/lib/glimmer/swt/property_owner.rb +2 -0
  31. data/lib/glimmer/swt/radio_proxy.rb +1 -1
  32. data/lib/glimmer/swt/shell_proxy.rb +32 -187
  33. data/lib/glimmer/swt/tab_folder_proxy.rb +43 -0
  34. data/lib/glimmer/swt/table_column_proxy.rb +3 -2
  35. data/lib/glimmer/swt/table_editor.rb +1 -1
  36. data/lib/glimmer/swt/table_item_proxy.rb +7 -5
  37. data/lib/glimmer/swt/table_proxy.rb +10 -0
  38. data/lib/glimmer/swt/widget_proxy.rb +313 -30
  39. data/lib/glimmer/ui/custom_shell.rb +1 -1
  40. data/lib/glimmer/ui/custom_widget.rb +3 -3
  41. metadata +20 -7
@@ -1,31 +1,56 @@
1
- class Person
2
- attr_accessor :country, :country_options
3
-
4
- def initialize
5
- self.country_options=["", "Canada", "US", "Mexico"]
6
- self.country = "Canada"
7
- end
8
-
9
- def reset_country
10
- self.country = "Canada"
11
- end
12
- end
1
+ # Copyright (c) 2007-2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
13
21
 
14
22
  class HelloListSingleSelection
23
+ class Person
24
+ attr_accessor :country, :country_options
25
+
26
+ def initialize
27
+ self.country_options = ['', 'Canada', 'US', 'Mexico']
28
+ reset_country
29
+ end
30
+
31
+ def reset_country
32
+ self.country = 'Canada'
33
+ end
34
+ end
35
+
15
36
  include Glimmer
37
+
16
38
  def launch
17
39
  person = Person.new
40
+
18
41
  shell {
19
- composite {
20
- list {
21
- selection bind(person, :country)
22
- }
23
- button {
24
- text "Reset"
25
- on_widget_selected do
26
- person.reset_country
27
- end
28
- }
42
+ grid_layout
43
+
44
+ text 'Hello, List Single Selection!'
45
+
46
+ list {
47
+ selection bind(person, :country)
48
+ }
49
+
50
+ button {
51
+ text 'Reset Selection To Default Value'
52
+
53
+ on_widget_selected { person.reset_country }
29
54
  }
30
55
  }.open
31
56
  end
@@ -0,0 +1,37 @@
1
+ # Copyright (c) 2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ include Glimmer
23
+
24
+ shell {
25
+ text 'Hello, Message Box!'
26
+
27
+ button {
28
+ text 'Please Click To Win a Surprise'
29
+
30
+ on_widget_selected {
31
+ message_box {
32
+ text 'Surprise'
33
+ message "Congratulations!\n\nYou won $1,000,000!"
34
+ }.open
35
+ }
36
+ }
37
+ }.open
@@ -0,0 +1,84 @@
1
+ # Copyright (c) 2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ include Glimmer
23
+
24
+ shell {
25
+ grid_layout {
26
+ margin_width 0
27
+ margin_height 0
28
+ }
29
+
30
+ text 'Hello, Pop Up Context Menu!'
31
+
32
+ label {
33
+ text "Right-Click on the Text to\nPop Up a Context Menu"
34
+ font height: 50
35
+
36
+ menu {
37
+ menu {
38
+ text '&History'
39
+ menu {
40
+ text '&Recent'
41
+ menu_item {
42
+ text 'File 1'
43
+ on_widget_selected {
44
+ message_box {
45
+ text 'File 1'
46
+ message 'File 1 Contents'
47
+ }.open
48
+ }
49
+ }
50
+ menu_item {
51
+ text 'File 2'
52
+ on_widget_selected {
53
+ message_box {
54
+ text 'File 2'
55
+ message 'File 2 Contents'
56
+ }.open
57
+ }
58
+ }
59
+ }
60
+ menu {
61
+ text '&Archived'
62
+ menu_item {
63
+ text 'File 3'
64
+ on_widget_selected {
65
+ message_box {
66
+ text 'File 3'
67
+ message 'File 3 Contents'
68
+ }.open
69
+ }
70
+ }
71
+ menu_item {
72
+ text 'File 4'
73
+ on_widget_selected {
74
+ message_box {
75
+ text 'File 4'
76
+ message 'File 4 Contents'
77
+ }.open
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }.open
@@ -4,7 +4,7 @@ module Glimmer
4
4
  def method_missing(method, *args, &block)
5
5
  method_name = method.to_s
6
6
  if method_name.start_with?('on_')
7
- handle_observation_request(method_name, &block)
7
+ handle_observation_request(method_name, block)
8
8
  else
9
9
  super
10
10
  end
@@ -43,7 +43,7 @@ module Glimmer
43
43
 
44
44
  def interpret(parent, keyword, *args, &block)
45
45
  begin
46
- require_path = `localStorage[#{keyword}]`
46
+ require_path = LocalStorage[keyword]
47
47
  require(require_path) if require_path
48
48
  rescue => e
49
49
  Glimmer::Config.logger.debug e.message
@@ -26,6 +26,8 @@ require 'glimmer/dsl/opal/swt_expression'
26
26
  require 'glimmer/dsl/opal/radio_group_selection_data_binding_expression'
27
27
  require 'glimmer/dsl/opal/checkbox_group_selection_data_binding_expression'
28
28
  require 'glimmer/dsl/opal/block_property_expression'
29
+ require 'glimmer/dsl/opal/menu_expression'
30
+ # require 'glimmer/dsl/opal/menu_bar_expression'
29
31
 
30
32
  module Glimmer
31
33
  module DSL
@@ -0,0 +1,54 @@
1
+ # Copyright (c) 2007-2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer'
23
+ require 'glimmer/dsl/static_expression'
24
+ require 'glimmer/dsl/parent_expression'
25
+ require 'glimmer/swt/menu_proxy'
26
+
27
+ # TODO implement for Opal
28
+
29
+ module Glimmer
30
+ module DSL
31
+ module SWT
32
+ class MenuBarExpression < StaticExpression
33
+ include ParentExpression
34
+
35
+ def can_interpret?(parent, keyword, *args, &block)
36
+ initial_condition = (keyword == 'menu_bar')
37
+ if initial_condition
38
+ if parent.swt_widget.is_a?(Shell)
39
+ return true
40
+ else
41
+ raise Glimmer::Error, "menu_bar may only be nested under a shell!"
42
+ end
43
+ end
44
+ false
45
+ end
46
+
47
+ def interpret(parent, keyword, *args, &block)
48
+ args = args.unshift(:bar)
49
+ Glimmer::SWT::MenuProxy.new(parent, args)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,61 @@
1
+ # Copyright (c) 2020 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer'
23
+ require 'glimmer/dsl/static_expression'
24
+ require 'glimmer/dsl/parent_expression'
25
+ require 'glimmer/swt/widget_proxy'
26
+ require 'glimmer/swt/menu_proxy'
27
+
28
+ module Glimmer
29
+ module DSL
30
+ module Opal
31
+ class MenuExpression < StaticExpression
32
+ include ParentExpression
33
+
34
+ def can_interpret?(parent, keyword, *args, &block)
35
+ initial_condition = (keyword == 'menu')
36
+ if initial_condition
37
+ if parent.is_a?(Glimmer::SWT::WidgetProxy)
38
+ return true
39
+ else
40
+ raise Glimmer::Error, "menu may only be nested under a widget (like shell or another menu)!"
41
+ end
42
+ end
43
+ false
44
+ end
45
+
46
+ def interpret(parent, keyword, *args, &block)
47
+ Glimmer::SWT::MenuProxy.new(parent, args)
48
+ end
49
+
50
+ def add_content(parent, &block)
51
+ super(parent, &block)
52
+ parent.post_add_content
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -7,6 +7,7 @@ module Glimmer
7
7
  module Opal
8
8
  class WidgetExpression < Expression
9
9
  include ParentExpression
10
+
10
11
  EXCLUDED_KEYWORDS = %w[shell display]
11
12
 
12
13
  def can_interpret?(parent, keyword, *args, &block)
@@ -18,9 +19,9 @@ module Glimmer
18
19
  def interpret(parent, keyword, *args, &block)
19
20
  Glimmer::SWT::WidgetProxy.for(keyword, parent, args, block)
20
21
  end
21
-
22
+
22
23
  def add_content(parent, &block)
23
- if parent.rendered?
24
+ if parent.rendered? || parent.skip_content_on_render_blocks?
24
25
  super(parent, &block)
25
26
  parent.post_add_content
26
27
  else
@@ -20,10 +20,10 @@ module Glimmer
20
20
  # Glimmer::Config.logger.debug {"can add listener? #{result}"}
21
21
  # raise Glimmer::Error, "Invalid listener keyword: #{keyword}" unless result
22
22
  true
23
- end
23
+ end
24
24
 
25
25
  def interpret(parent, keyword, *args, &block)
26
- parent.handle_observation_request(keyword, &block)
26
+ parent.handle_observation_request(keyword, block)
27
27
  end
28
28
  end
29
29
  end
@@ -78,7 +78,7 @@ module Glimmer
78
78
  checkboxes.first&.can_handle_observation_request?(observation_request) || super(observation_request)
79
79
  end
80
80
 
81
- def handle_observation_request(observation_request, &block)
81
+ def handle_observation_request(observation_request, block)
82
82
  observation_requests << [observation_request, block]
83
83
  delegate_observation_request_to_checkboxes(observation_request, &block)
84
84
  super
@@ -88,7 +88,7 @@ module Glimmer
88
88
  if observation_request != 'on_widget_disposed'
89
89
  checkboxes.count.times do |index|
90
90
  checkbox = checkboxes[index]
91
- checkbox.handle_observation_request(observation_request, &block) if checkbox.can_handle_observation_request?(observation_request)
91
+ checkbox.handle_observation_request(observation_request, block) if checkbox.can_handle_observation_request?(observation_request)
92
92
  end
93
93
  end
94
94
  end
@@ -81,7 +81,7 @@ module Glimmer
81
81
  radios.first&.can_handle_observation_request?(observation_request) || super(observation_request)
82
82
  end
83
83
 
84
- def handle_observation_request(observation_request, &block)
84
+ def handle_observation_request(observation_request, block)
85
85
  observation_requests << [observation_request, block]
86
86
  delegate_observation_request_to_radios(observation_request, &block)
87
87
  super
@@ -91,7 +91,7 @@ module Glimmer
91
91
  if observation_request != 'on_widget_disposed'
92
92
  radios.count.times do |index|
93
93
  radio = radios[index]
94
- radio.handle_observation_request(observation_request, &block) if radio.can_handle_observation_request?(observation_request)
94
+ radio.handle_observation_request(observation_request, block) if radio.can_handle_observation_request?(observation_request)
95
95
  end
96
96
  end
97
97
  end
@@ -1,18 +1,28 @@
1
1
  module Glimmer
2
2
  module SWT
3
3
  class EventListenerProxy
4
- attr_reader :element_proxy, :event, :selector, :delegate
4
+ attr_reader :element_proxy, :event, :dom_element, :selector, :listener, :original_event_listener
5
5
 
6
- def initialize(element_proxy:, event:, selector:, delegate:)
6
+ def initialize(element_proxy:, event:, dom_element:, selector:, listener:)
7
7
  @element_proxy = element_proxy
8
8
  @event = event
9
+ @dom_element = dom_element
9
10
  @selector = selector
10
- @delegate = delegate
11
+ @listener = listener
12
+ @original_event_listener = original_event_listener
11
13
  end
12
14
 
15
+ def register
16
+ @dom_element.on(@event, @delegate)
17
+ end
18
+ alias observe register
19
+ alias reregister register
20
+
13
21
  def unregister
14
- $document.off(@delegate)
22
+ @dom_element.off(@event, @delegate)
15
23
  end
24
+ alias unobserve unregister
25
+ alias deregister unregister
16
26
  end
17
27
  end
18
28
  end