glimmer-dsl-swt 4.19.0.2 → 4.20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/README.md +14 -19
  4. data/RUBY_VERSION +1 -1
  5. data/VERSION +1 -1
  6. data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +33 -8
  7. data/glimmer-dsl-swt.gemspec +0 -0
  8. data/lib/glimmer/data_binding/shine.rb +41 -26
  9. data/lib/glimmer/dsl/swt/dsl.rb +2 -1
  10. data/lib/glimmer/dsl/swt/shine_data_binding_expression.rb +49 -0
  11. data/lib/glimmer/launcher.rb +6 -0
  12. data/lib/glimmer/swt/custom/code_text.rb +13 -9
  13. data/samples/elaborate/contact_manager.rb +7 -5
  14. data/samples/elaborate/login.rb +7 -7
  15. data/samples/elaborate/mandelbrot_fractal.rb +2 -2
  16. data/samples/elaborate/metronome.rb +3 -3
  17. data/samples/elaborate/tic_tac_toe.rb +2 -2
  18. data/samples/hello/hello_button.rb +1 -1
  19. data/samples/hello/hello_c_combo.rb +2 -1
  20. data/samples/hello/hello_c_tab.rb +1 -0
  21. data/samples/hello/hello_canvas.rb +5 -5
  22. data/samples/hello/hello_canvas_animation_data_binding.rb +1 -1
  23. data/samples/hello/hello_canvas_data_binding.rb +16 -16
  24. data/samples/hello/hello_checkbox.rb +4 -4
  25. data/samples/hello/hello_code_text.rb +3 -57
  26. data/samples/hello/hello_color_dialog.rb +1 -1
  27. data/samples/hello/hello_combo.rb +1 -1
  28. data/samples/hello/hello_computed.rb +5 -5
  29. data/samples/hello/hello_custom_widget.rb +1 -1
  30. data/samples/hello/hello_date_time.rb +4 -4
  31. data/samples/hello/hello_dialog.rb +3 -2
  32. data/samples/hello/hello_drag_and_drop.rb +1 -1
  33. data/samples/hello/hello_file_dialog.rb +1 -1
  34. data/samples/hello/hello_font_dialog.rb +3 -3
  35. data/samples/hello/hello_group.rb +6 -6
  36. data/samples/hello/hello_link.rb +56 -50
  37. data/samples/hello/hello_list_multi_selection.rb +1 -1
  38. data/samples/hello/hello_list_single_selection.rb +1 -1
  39. data/samples/hello/hello_progress_bar.rb +10 -10
  40. data/samples/hello/hello_radio.rb +6 -6
  41. data/samples/hello/hello_sash_form.rb +4 -4
  42. data/samples/hello/hello_spinner.rb +6 -2
  43. data/samples/hello/hello_styled_text.rb +11 -11
  44. data/vendor/swt/linux/swt.jar +0 -0
  45. data/vendor/swt/linux_aarch64/swt.jar +0 -0
  46. data/vendor/swt/mac/swt.jar +0 -0
  47. data/vendor/swt/mac_aarch64/swt.jar +0 -0
  48. data/vendor/swt/windows/swt.jar +0 -0
  49. metadata +6 -3
@@ -55,7 +55,7 @@ class GreetingLabel
55
55
  label(swt_style) {
56
56
  text "#{greeting}, #{name}!"
57
57
  font @font
58
- foreground bind(self, :color)
58
+ foreground <=> [self, :color]
59
59
  }
60
60
  }
61
61
 
@@ -46,19 +46,19 @@ class HelloDateTime
46
46
  }
47
47
 
48
48
  date { # alias for date_time(:date)
49
- date_time bind(@person, :date_of_birth)
49
+ date_time <=> [@person, :date_of_birth]
50
50
  }
51
51
 
52
52
  date_drop_down { # alias for date_time(:date, :drop_down)
53
- date_time bind(@person, :date_of_birth)
53
+ date_time <=> [@person, :date_of_birth]
54
54
  }
55
55
 
56
56
  time { # alias for date_time(:time)
57
- date_time bind(@person, :date_of_birth)
57
+ date_time <=> [@person, :date_of_birth]
58
58
  }
59
59
 
60
60
  calendar { # alias for date_time(:calendar)
61
- date_time bind(@person, :date_of_birth)
61
+ date_time <=> [@person, :date_of_birth]
62
62
  }
63
63
  }
64
64
  }
@@ -23,7 +23,7 @@ require 'glimmer-dsl-swt'
23
23
 
24
24
  include Glimmer
25
25
 
26
- shell {
26
+ shell { |shell_proxy|
27
27
  row_layout :vertical
28
28
 
29
29
  text 'Hello, Dialog!'
@@ -39,7 +39,8 @@ shell {
39
39
  text "Dialog #{dialog_number}"
40
40
 
41
41
  on_widget_selected {
42
- dialog { |dialog_proxy|
42
+ # pass the shell proxy as a parent to make the dialog support hitting the escape button for closing alone without closing app
43
+ dialog(shell_proxy) { |dialog_proxy|
43
44
  row_layout(:vertical) {
44
45
  center true
45
46
  }
@@ -36,7 +36,7 @@ include Glimmer
36
36
  shell {
37
37
  text 'Hello, Drag and Drop!'
38
38
  list {
39
- selection bind(@location, :country)
39
+ selection <=> [@location, :country]
40
40
  on_drag_set_data { |event|
41
41
  list = event.widget.getControl
42
42
  event.data = list.getSelection.first
@@ -44,7 +44,7 @@ class HelloFileDialog
44
44
 
45
45
  label {
46
46
  layout_data :fill, :center, true, false
47
- text bind(self, :selected_file)
47
+ text <=> [self, :selected_file]
48
48
  font height: 14
49
49
  }
50
50
 
@@ -51,8 +51,8 @@ class HelloFontDialog
51
51
  height_hint 200
52
52
  }
53
53
  background :white
54
- font bind(self, 'selected_font_data')
55
- text bind(self, 'selected_font_data') {|font_data|
54
+ font <=> [self, 'selected_font_data']
55
+ text <=> [self, 'selected_font_data', on_read: ->(font_data) {
56
56
  style = case font_data.style
57
57
  when swt(:normal)
58
58
  'Normal'
@@ -64,7 +64,7 @@ class HelloFontDialog
64
64
  'Bold Italic'
65
65
  end
66
66
  "#{font_data.name}\n#{font_data.height}\n#{style}"
67
- }
67
+ }]
68
68
  }
69
69
 
70
70
  button {
@@ -58,12 +58,12 @@ class HelloGroup
58
58
 
59
59
  radio {
60
60
  text 'Male'
61
- selection bind(@person, :male)
61
+ selection <=> [@person, :male]
62
62
  }
63
63
 
64
64
  radio {
65
65
  text 'Female'
66
- selection bind(@person, :female)
66
+ selection <=> [@person, :female]
67
67
  }
68
68
  }
69
69
 
@@ -75,22 +75,22 @@ class HelloGroup
75
75
 
76
76
  radio {
77
77
  text 'Child'
78
- selection bind(@person, :child)
78
+ selection <=> [@person, :child]
79
79
  }
80
80
 
81
81
  radio {
82
82
  text 'Teen'
83
- selection bind(@person, :teen)
83
+ selection <=> [@person, :teen]
84
84
  }
85
85
 
86
86
  radio {
87
87
  text 'Adult'
88
- selection bind(@person, :adult)
88
+ selection <=> [@person, :adult]
89
89
  }
90
90
 
91
91
  radio {
92
92
  text 'Senior'
93
- selection bind(@person, :senior)
93
+ selection <=> [@person, :senior]
94
94
  }
95
95
  }
96
96
 
@@ -21,62 +21,68 @@
21
21
 
22
22
  require 'glimmer-dsl-swt'
23
23
 
24
- include Glimmer
25
-
26
- shell { |main_shell|
27
- grid_layout {
28
- margin_width 20
29
- margin_height 10
30
- }
24
+ class HelloLink
25
+ include Glimmer::UI::CustomShell
31
26
 
32
- background :white
33
- text 'Hello, Link!'
34
-
35
- @link = link {
36
- background :white
37
- link_foreground :dark_green
38
- font height: 16
39
- text <<~MULTI_LINE_STRING
40
-
41
- You may click on any <a>link</a> to get help.
27
+ body {
28
+ shell { |main_shell|
29
+ grid_layout {
30
+ margin_width 20
31
+ margin_height 10
32
+ }
42
33
 
43
- How do you know <a href="which-link-href-value">which link</a> you clicked?
34
+ background :white
35
+ text 'Hello, Link!'
44
36
 
45
- Just keep clicking <a href="all links">links</a> to find out!
46
- MULTI_LINE_STRING
37
+ @link = link {
38
+ background :white
39
+ link_foreground :dark_green
40
+ font height: 16
41
+ text <<~MULTI_LINE_STRING
47
42
 
48
- on_widget_selected { |selection_event|
49
- # This retrieves the clicked link href (or contained text if no href is set)
50
- @selected_link = selection_event.text
51
- }
52
- on_mouse_up { |mouse_event|
53
- unless @selected_link.nil?
54
- @help_shell.close unless @help_shell.nil? || @help_shell.disposed?
55
- @help_shell = shell(:no_trim) {
56
- grid_layout {
57
- margin_width 10
58
- margin_height 10
59
- }
43
+ You may click on any <a>link</a> to get help.
60
44
 
61
- background :yellow
45
+ How do you know <a href="which-link-href-value">which link</a> you clicked?
62
46
 
63
- label {
64
- background :yellow
65
- text "Did someone ask for help about \"#{@selected_link}\"?\nYou don't really need help. You did it!"
66
- }
67
-
68
- on_swt_show {
69
- x = main_shell.location.x + @link.location.x + mouse_event.x
70
- y = main_shell.location.y + @link.location.y + mouse_event.y + 20
71
- @help_shell.location = Point.new(x, y)
72
- }
73
- on_focus_lost {
74
- @selected_link = nil
75
- @help_shell.close
76
- }
47
+ Just keep clicking <a href="all links">links</a> to find out!
48
+ MULTI_LINE_STRING
49
+
50
+ on_widget_selected { |selection_event|
51
+ # This retrieves the clicked link href (or contained text if no href is set)
52
+ @selected_link = selection_event.text
53
+ }
54
+ on_mouse_up { |mouse_event|
55
+ unless @selected_link.nil?
56
+ @help_shell.close unless @help_shell.nil? || @help_shell.disposed?
57
+ @help_shell = shell(:no_trim) {
58
+ grid_layout {
59
+ margin_width 10
60
+ margin_height 10
61
+ }
62
+
63
+ background :yellow
64
+
65
+ label {
66
+ background :yellow
67
+ text "Did someone ask for help about \"#{@selected_link}\"?\nYou don't really need help. You did it!"
68
+ }
69
+
70
+ on_swt_show {
71
+ x = main_shell.location.x + @link.location.x + mouse_event.x
72
+ y = main_shell.location.y + @link.location.y + mouse_event.y + 20
73
+ @help_shell.location = Point.new(x, y)
74
+ }
75
+ on_focus_lost {
76
+ @selected_link = nil
77
+ @help_shell.close
78
+ }
79
+ }
80
+ @help_shell.open
81
+ end
77
82
  }
78
- @help_shell.open
79
- end
83
+ }
80
84
  }
81
85
  }
82
- }.open
86
+ end
87
+
88
+ HelloLink.launch
@@ -63,7 +63,7 @@ class HelloListMultiSelection
63
63
  text 'Hello, List Multi Selection!'
64
64
 
65
65
  list(:multi) {
66
- selection bind(@person, :provinces) # also binds to provinces_options by convention
66
+ selection <=> [@person, :provinces] # also binds to provinces_options by convention
67
67
  }
68
68
 
69
69
  button {
@@ -48,7 +48,7 @@ class HelloListSingleSelection
48
48
  text 'Hello, List Single Selection!'
49
49
 
50
50
  list {
51
- selection bind(@person, :country) # also binds to country_options by convention
51
+ selection <=> [@person, :country] # also binds to country_options by convention
52
52
  }
53
53
 
54
54
  button {
@@ -65,40 +65,40 @@ class HelloProgressBar
65
65
  }
66
66
 
67
67
  spinner {
68
- selection bind(@progress_model, :minimum)
68
+ selection <=> [@progress_model, :minimum]
69
69
  }
70
70
 
71
71
  spinner {
72
- selection bind(@progress_model, :maximum)
72
+ selection <=> [@progress_model, :maximum]
73
73
  }
74
74
 
75
75
  spinner {
76
- selection bind(@progress_model, :selection)
76
+ selection <=> [@progress_model, :selection]
77
77
  }
78
78
 
79
79
  spinner {
80
80
  digits 2
81
81
  minimum 1
82
82
  maximum 200
83
- selection bind(@progress_model, :delay, on_read: ->(v) {v.to_f*100.0}, on_write: ->(v) {v.to_f/100.0})
83
+ selection <=> [@progress_model, :delay, on_read: ->(v) {v.to_f*100.0}, on_write: ->(v) {v.to_f/100.0}]
84
84
  }
85
85
 
86
86
  progress_bar {
87
87
  layout_data(:fill, :center, true, false) {
88
88
  horizontal_span 4
89
89
  }
90
- minimum bind(@progress_model, :minimum)
91
- maximum bind(@progress_model, :maximum)
92
- selection bind(@progress_model, :selection)
90
+ minimum <= [@progress_model, :minimum]
91
+ maximum <= [@progress_model, :maximum]
92
+ selection <= [@progress_model, :selection]
93
93
  }
94
94
 
95
95
  progress_bar(:vertical) {
96
96
  layout_data(:fill, :center, true, false) {
97
97
  horizontal_span 4
98
98
  }
99
- minimum bind(@progress_model, :minimum)
100
- maximum bind(@progress_model, :maximum)
101
- selection bind(@progress_model, :selection)
99
+ minimum <= [@progress_model, :minimum]
100
+ maximum <= [@progress_model, :maximum]
101
+ selection <= [@progress_model, :selection]
102
102
  }
103
103
 
104
104
  button {
@@ -60,12 +60,12 @@ class HelloRadio
60
60
 
61
61
  radio {
62
62
  text 'Male'
63
- selection bind(@person, :male)
63
+ selection <=> [@person, :male]
64
64
  }
65
65
 
66
66
  radio {
67
67
  text 'Female'
68
- selection bind(@person, :female)
68
+ selection <=> [@person, :female]
69
69
  }
70
70
  }
71
71
 
@@ -79,22 +79,22 @@ class HelloRadio
79
79
 
80
80
  radio {
81
81
  text 'Child'
82
- selection bind(@person, :child)
82
+ selection <=> [@person, :child]
83
83
  }
84
84
 
85
85
  radio {
86
86
  text 'Teen'
87
- selection bind(@person, :teen)
87
+ selection <=> [@person, :teen]
88
88
  }
89
89
 
90
90
  radio {
91
91
  text 'Adult'
92
- selection bind(@person, :adult)
92
+ selection <=> [@person, :adult]
93
93
  }
94
94
 
95
95
  radio {
96
96
  text 'Senior'
97
- selection bind(@person, :senior)
97
+ selection <=> [@person, :senior]
98
98
  }
99
99
  }
100
100
 
@@ -54,8 +54,8 @@ shell {
54
54
  layout_data(:fill, :fill, true, true) {
55
55
  height_hint 200
56
56
  }
57
- sash_width bind(@presenter, :sash_width)
58
- orientation bind(@presenter, :orientation_style)
57
+ sash_width <=> [@presenter, :sash_width]
58
+ orientation <=> [@presenter, :orientation_style]
59
59
  weights 1, 2
60
60
 
61
61
  @green_label = label {
@@ -86,7 +86,7 @@ shell {
86
86
  layout_data(:fill, :center, true, false) {
87
87
  width_hint 100
88
88
  }
89
- selection bind(@presenter, :sash_width)
89
+ selection <=> [@presenter, :sash_width]
90
90
  font height: 16
91
91
  }
92
92
 
@@ -99,7 +99,7 @@ shell {
99
99
  layout_data(:fill, :center, true, false) {
100
100
  width_hint 100
101
101
  }
102
- selection bind(@presenter, :orientation)
102
+ selection <=> [@presenter, :orientation]
103
103
  font height: 16
104
104
  }
105
105
 
@@ -47,6 +47,9 @@ class HelloSpinner
47
47
  grid_layout 3, false
48
48
 
49
49
  label {
50
+ layout_data {
51
+ width_hint 240
52
+ }
50
53
  text 'Amount:'
51
54
  font style: :bold
52
55
  }
@@ -61,11 +64,12 @@ class HelloSpinner
61
64
  maximum 15000 # maximum value (including digits after the decimal point)
62
65
  increment 500 # increment on up and down (including digits after the decimal point)
63
66
  page_increment 5000 # page increment on page up and page down (including digits after the decimal point)
64
- selection bind(@person, :donation) # selection must be set last if other properties are configured to ensure value is within bounds
67
+ selection <=> [@person, :donation] # selection must be set last if other properties are configured to ensure value is within bounds
65
68
  }
66
69
 
67
70
  label {
68
- text bind(@person, :donation) {|value| "Thank you for your donation of $#{"%.2f" % (value.to_f / 100.0)}"}
71
+ layout_data(:fill, :center, true, false)
72
+ text <=> [@person, :donation, on_read: ->(value) { "Thank you for your donation of $#{"%.2f" % (value.to_f / 100.0)}"}]
69
73
  }
70
74
 
71
75
  }
@@ -49,7 +49,7 @@ end
49
49
  include Glimmer
50
50
 
51
51
  @presenter = StyledTextPresenter.new
52
- @presenter.text = verbiage*8
52
+ @presenter.text = verbiage*4
53
53
  @presenter.caret_offset = 0
54
54
  @presenter.selection_count = 0
55
55
  @presenter.selection = Point.new(0, 0)
@@ -61,19 +61,19 @@ shell {
61
61
  composite {
62
62
  @styled_text = styled_text {
63
63
  layout_data :fill, :fill, true, true
64
- text bind(@presenter, :text)
64
+ text <=> [@presenter, :text]
65
65
  left_margin 5
66
66
  top_margin 5
67
67
  right_margin 5
68
68
  bottom_margin 5
69
69
  # caret offset scrolls text to view when out of page
70
- caret_offset bind(@presenter, :caret_offset)
70
+ caret_offset <=> [@presenter, :caret_offset]
71
71
  # selection_count is not needed if selection is used
72
- selection_count bind(@presenter, :selection_count)
72
+ selection_count <=> [@presenter, :selection_count]
73
73
  # selection contains both caret_offset and selection_count, but setting it does not scroll text into view if out of page
74
- selection bind(@presenter, :selection)
74
+ selection <=> [@presenter, :selection]
75
75
  # top_pixel indicates vertically what pixel scrolling is at in a long multi-page text document
76
- top_pixel bind(@presenter, :top_pixel)
76
+ top_pixel <=> [@presenter, :top_pixel]
77
77
 
78
78
  # This demonstrates how to set styles via a listener
79
79
  on_line_get_style { |line_style_event|
@@ -109,31 +109,31 @@ shell {
109
109
  text 'Caret Offset:'
110
110
  }
111
111
  text {
112
- text bind(@presenter, :caret_offset, on_read: ->(o) {"%04d" % [o] })
112
+ text <=> [@presenter, :caret_offset, on_read: ->(o) {"%04d" % [o] }]
113
113
  }
114
114
  label {
115
115
  text 'Selection Count:'
116
116
  }
117
117
  text {
118
- text bind(@presenter, :selection_count, on_read: ->(o) {"%04d" % [o] })
118
+ text <=> [@presenter, :selection_count, on_read: ->(o) {"%04d" % [o] }]
119
119
  }
120
120
  label {
121
121
  text 'Selection Start:'
122
122
  }
123
123
  text {
124
- text bind(@presenter, 'selection.x', on_read: ->(o) {"%04d" % [o] })
124
+ text <=> [@presenter, 'selection.x', on_read: ->(o) {"%04d" % [o] }]
125
125
  }
126
126
  label {
127
127
  text 'Selection End:'
128
128
  }
129
129
  text {
130
- text bind(@presenter, 'selection.y', on_read: ->(o) {"%04d" % [o] })
130
+ text <=> [@presenter, 'selection.y', on_read: ->(o) {"%04d" % [o] }]
131
131
  }
132
132
  label {
133
133
  text 'Top Pixel:'
134
134
  }
135
135
  text {
136
- text bind(@presenter, :top_pixel, on_read: ->(o) {"%04d" % [o] })
136
+ text <=> [@presenter, :top_pixel, on_read: ->(o) {"%04d" % [o] }]
137
137
  }
138
138
  }
139
139
  }