glimmer-dsl-swt 4.19.0.2 → 4.20.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }