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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +14 -19
- data/RUBY_VERSION +1 -1
- data/VERSION +1 -1
- data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +33 -8
- data/glimmer-dsl-swt.gemspec +0 -0
- data/lib/glimmer/data_binding/shine.rb +41 -26
- data/lib/glimmer/dsl/swt/dsl.rb +2 -1
- data/lib/glimmer/dsl/swt/shine_data_binding_expression.rb +49 -0
- data/lib/glimmer/launcher.rb +6 -0
- data/lib/glimmer/swt/custom/code_text.rb +13 -9
- data/samples/elaborate/contact_manager.rb +7 -5
- data/samples/elaborate/login.rb +7 -7
- data/samples/elaborate/mandelbrot_fractal.rb +2 -2
- data/samples/elaborate/metronome.rb +3 -3
- data/samples/elaborate/tic_tac_toe.rb +2 -2
- data/samples/hello/hello_button.rb +1 -1
- data/samples/hello/hello_c_combo.rb +2 -1
- data/samples/hello/hello_c_tab.rb +1 -0
- data/samples/hello/hello_canvas.rb +5 -5
- data/samples/hello/hello_canvas_animation_data_binding.rb +1 -1
- data/samples/hello/hello_canvas_data_binding.rb +16 -16
- data/samples/hello/hello_checkbox.rb +4 -4
- data/samples/hello/hello_code_text.rb +3 -57
- data/samples/hello/hello_color_dialog.rb +1 -1
- data/samples/hello/hello_combo.rb +1 -1
- data/samples/hello/hello_computed.rb +5 -5
- data/samples/hello/hello_custom_widget.rb +1 -1
- data/samples/hello/hello_date_time.rb +4 -4
- data/samples/hello/hello_dialog.rb +3 -2
- data/samples/hello/hello_drag_and_drop.rb +1 -1
- data/samples/hello/hello_file_dialog.rb +1 -1
- data/samples/hello/hello_font_dialog.rb +3 -3
- data/samples/hello/hello_group.rb +6 -6
- data/samples/hello/hello_link.rb +56 -50
- data/samples/hello/hello_list_multi_selection.rb +1 -1
- data/samples/hello/hello_list_single_selection.rb +1 -1
- data/samples/hello/hello_progress_bar.rb +10 -10
- data/samples/hello/hello_radio.rb +6 -6
- data/samples/hello/hello_sash_form.rb +4 -4
- data/samples/hello/hello_spinner.rb +6 -2
- data/samples/hello/hello_styled_text.rb +11 -11
- data/vendor/swt/linux/swt.jar +0 -0
- data/vendor/swt/linux_aarch64/swt.jar +0 -0
- data/vendor/swt/mac/swt.jar +0 -0
- data/vendor/swt/mac_aarch64/swt.jar +0 -0
- data/vendor/swt/windows/swt.jar +0 -0
- metadata +6 -3
@@ -46,19 +46,19 @@ class HelloDateTime
|
|
46
46
|
}
|
47
47
|
|
48
48
|
date { # alias for date_time(:date)
|
49
|
-
date_time
|
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
|
53
|
+
date_time <=> [@person, :date_of_birth]
|
54
54
|
}
|
55
55
|
|
56
56
|
time { # alias for date_time(:time)
|
57
|
-
date_time
|
57
|
+
date_time <=> [@person, :date_of_birth]
|
58
58
|
}
|
59
59
|
|
60
60
|
calendar { # alias for date_time(:calendar)
|
61
|
-
date_time
|
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
|
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
|
}
|
@@ -51,8 +51,8 @@ class HelloFontDialog
|
|
51
51
|
height_hint 200
|
52
52
|
}
|
53
53
|
background :white
|
54
|
-
font
|
55
|
-
text
|
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
|
61
|
+
selection <=> [@person, :male]
|
62
62
|
}
|
63
63
|
|
64
64
|
radio {
|
65
65
|
text 'Female'
|
66
|
-
selection
|
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
|
78
|
+
selection <=> [@person, :child]
|
79
79
|
}
|
80
80
|
|
81
81
|
radio {
|
82
82
|
text 'Teen'
|
83
|
-
selection
|
83
|
+
selection <=> [@person, :teen]
|
84
84
|
}
|
85
85
|
|
86
86
|
radio {
|
87
87
|
text 'Adult'
|
88
|
-
selection
|
88
|
+
selection <=> [@person, :adult]
|
89
89
|
}
|
90
90
|
|
91
91
|
radio {
|
92
92
|
text 'Senior'
|
93
|
-
selection
|
93
|
+
selection <=> [@person, :senior]
|
94
94
|
}
|
95
95
|
}
|
96
96
|
|
data/samples/hello/hello_link.rb
CHANGED
@@ -21,62 +21,68 @@
|
|
21
21
|
|
22
22
|
require 'glimmer-dsl-swt'
|
23
23
|
|
24
|
-
|
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
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
34
|
+
background :white
|
35
|
+
text 'Hello, Link!'
|
44
36
|
|
45
|
-
|
46
|
-
|
37
|
+
@link = link {
|
38
|
+
background :white
|
39
|
+
link_foreground :dark_green
|
40
|
+
font height: 16
|
41
|
+
text <<~MULTI_LINE_STRING
|
47
42
|
|
48
|
-
|
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
|
-
|
45
|
+
How do you know <a href="which-link-href-value">which link</a> you clicked?
|
62
46
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
-
|
79
|
-
end
|
83
|
+
}
|
80
84
|
}
|
81
85
|
}
|
82
|
-
|
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
|
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
|
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
|
68
|
+
selection <=> [@progress_model, :minimum]
|
69
69
|
}
|
70
70
|
|
71
71
|
spinner {
|
72
|
-
selection
|
72
|
+
selection <=> [@progress_model, :maximum]
|
73
73
|
}
|
74
74
|
|
75
75
|
spinner {
|
76
|
-
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
|
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
|
91
|
-
maximum
|
92
|
-
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
|
100
|
-
maximum
|
101
|
-
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
|
63
|
+
selection <=> [@person, :male]
|
64
64
|
}
|
65
65
|
|
66
66
|
radio {
|
67
67
|
text 'Female'
|
68
|
-
selection
|
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
|
82
|
+
selection <=> [@person, :child]
|
83
83
|
}
|
84
84
|
|
85
85
|
radio {
|
86
86
|
text 'Teen'
|
87
|
-
selection
|
87
|
+
selection <=> [@person, :teen]
|
88
88
|
}
|
89
89
|
|
90
90
|
radio {
|
91
91
|
text 'Adult'
|
92
|
-
selection
|
92
|
+
selection <=> [@person, :adult]
|
93
93
|
}
|
94
94
|
|
95
95
|
radio {
|
96
96
|
text 'Senior'
|
97
|
-
selection
|
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
|
58
|
-
orientation
|
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
|
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
|
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
|
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
|
-
|
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*
|
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
|
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
|
70
|
+
caret_offset <=> [@presenter, :caret_offset]
|
71
71
|
# selection_count is not needed if selection is used
|
72
|
-
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
|
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
|
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
|
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
|
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
|
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
|
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
|
136
|
+
text <=> [@presenter, :top_pixel, on_read: ->(o) {"%04d" % [o] }]
|
137
137
|
}
|
138
138
|
}
|
139
139
|
}
|