glimmer-dsl-swt 4.21.0.1 → 4.21.2.1

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/README.md +17 -11
  4. data/RUBY_VERSION +1 -1
  5. data/VERSION +1 -1
  6. data/docs/reference/GLIMMER_COMMAND.md +1 -1
  7. data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +45 -26
  8. data/docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md +73 -16
  9. data/glimmer-dsl-swt.gemspec +0 -0
  10. data/lib/glimmer/data_binding/widget_binding.rb +3 -3
  11. data/lib/glimmer/rake_task/package.rb +1 -1
  12. data/lib/glimmer/rake_task/scaffold.rb +4 -22
  13. data/lib/glimmer/rake_task.rb +1 -5
  14. data/lib/glimmer/swt/image_proxy.rb +5 -3
  15. data/lib/glimmer/swt/shell_proxy.rb +5 -3
  16. data/lib/glimmer/swt/style_constantizable.rb +2 -0
  17. data/lib/glimmer/swt/widget_proxy.rb +80 -0
  18. data/samples/elaborate/battleship/view/grid.rb +3 -3
  19. data/samples/elaborate/battleship/view/ship.rb +1 -1
  20. data/samples/elaborate/meta_sample.rb +12 -5
  21. data/samples/elaborate/tetris/view/tetris_menu_bar.rb +2 -2
  22. data/samples/elaborate/tetris.rb +12 -14
  23. data/samples/elaborate/tic_tac_toe.rb +6 -3
  24. data/samples/elaborate/timer.rb +0 -1
  25. data/samples/elaborate/weather.rb +3 -0
  26. data/samples/hello/hello_canvas.rb +1 -1
  27. data/samples/hello/hello_canvas_transform.rb +1 -1
  28. data/samples/hello/hello_cool_bar.rb +5 -60
  29. data/samples/hello/hello_drag_and_drop.rb +172 -11
  30. data/samples/hello/hello_scale.rb +1 -4
  31. data/samples/hello/hello_slider.rb +1 -4
  32. data/samples/hello/hello_tool_bar.rb +7 -53
  33. data/samples/hello/images/copy.png +0 -0
  34. data/samples/hello/images/cut.png +0 -0
  35. data/samples/hello/images/paste.png +0 -0
  36. metadata +11 -9
@@ -35,18 +35,179 @@ include Glimmer
35
35
 
36
36
  shell {
37
37
  text 'Hello, Drag and Drop!'
38
- list {
39
- selection <=> [@location, :country]
40
- on_drag_set_data { |event|
41
- list = event.widget.getControl
42
- event.data = list.getSelection.first
38
+
39
+ tab_folder {
40
+ tab_item {
41
+ fill_layout
42
+ text 'List'
43
+
44
+ list {
45
+ selection <=> [@location, :country]
46
+
47
+ # Option 1: Automatic Drag Data Setting
48
+ drag_source true
49
+
50
+ # Option 2: Manual Drag Data Setting
51
+ # on_drag_set_data do |event|
52
+ # drag_widget = event.widget.control
53
+ # event.data = drag_widget.selection.first
54
+ # end
55
+
56
+ # Option 3: Full Customization of Drag Source (details at: https://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html)
57
+ # drag_source(:drop_copy) { # options: :drop_copy, :drop_link, :drop_move, :drop_target_move
58
+ # transfer :text # options: :text, :file, :rtf
59
+ #
60
+ # on_drag_start do |event|
61
+ # drag_widget = event.widget.control.data('proxy') # obtain Glimmer widget proxy since it permits nicer syntax for setting cursor via symbol
62
+ # drag_widget.cursor = :wait
63
+ # end
64
+ #
65
+ # on_drag_set_data do |event|
66
+ # drag_widget = event.widget.control
67
+ # event.data = drag_widget.selection.first
68
+ # end
69
+ #
70
+ # on_drag_finished do |event|
71
+ # drag_widget = event.widget.control.data('proxy') # obtain Glimmer widget proxy since it permits nicer syntax for setting cursor via symbol
72
+ # drag_widget.cursor = :arrow
73
+ # end
74
+ # }
75
+ }
76
+
77
+ list {
78
+ # Option 1: Automatic Drop Data Consumption
79
+ # drop_target :unique # does not add same data twice
80
+ drop_target true
81
+
82
+ # Option 2: Manual Drop Data Consumption
83
+ # on_drop do |event|
84
+ # drop_widget = event.widget.control
85
+ # drop_widget.add(event.data)
86
+ # drop_widget.select(drop_widget.items.count - 1)
87
+ # end
88
+
89
+ # Option 3: Full Customization of Drop Target (details at: https://www.eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html)
90
+ # drop_target(:drop_copy) { # options: :drop_copy, :drop_link, :drop_move, :drop_target_move
91
+ # transfer :text # options: :text, :file, :rtf
92
+ #
93
+ # on_drag_enter do |event|
94
+ # drop_widget = event.widget.control.data('proxy') # obtain Glimmer widget proxy since it permits nicer syntax for setting background via symbol
95
+ # drop_widget.background = :red
96
+ # end
97
+ #
98
+ # on_drag_leave do |event|
99
+ # drop_widget = event.widget.control.data('proxy') # obtain Glimmer widget proxy since it permits nicer syntax for setting background via symbol
100
+ # drop_widget.background = :white
101
+ # end
102
+ #
103
+ # on_drop do |event|
104
+ # drop_widget = event.widget.control.data('proxy') # obtain Glimmer widget proxy since it permits nicer syntax for setting background/cursor via symbol
105
+ # drop_widget.background = :white
106
+ # drop_widget.add(event.data)
107
+ # drop_widget.select(drop_widget.items.count - 1)
108
+ # drop_widget.cursor = :arrow
109
+ # end
110
+ # }
111
+ }
43
112
  }
44
- }
45
- label(:center) {
46
- text 'Drag a country here!'
47
- font height: 20
48
- on_drop { |event|
49
- event.widget.getControl.setText(event.data)
113
+
114
+ tab_item {
115
+ grid_layout 2, true
116
+ text 'Label'
117
+
118
+ label {
119
+ layout_data {
120
+ horizontal_span 2
121
+ }
122
+ text 'Drag text from any label and drop it unto another label'
123
+ }
124
+
125
+ {
126
+ Argentina: :green,
127
+ Brazil: :red,
128
+ Finland: :yellow,
129
+ Sweden: :magenta,
130
+ Denmark: :gray,
131
+ Iceland: :cyan
132
+ }.each do |country, color|
133
+ label {
134
+ layout_data :fill, :fill, true, true
135
+ text country
136
+ font height: 20
137
+ background color
138
+ drag_source true
139
+ drop_target true
140
+ }
141
+ end
142
+ }
143
+
144
+ tab_item {
145
+ grid_layout 2, true
146
+ text 'Text'
147
+
148
+ label {
149
+ text 'Drag'
150
+ }
151
+
152
+ label {
153
+ text 'Drop To Insert'
154
+ }
155
+
156
+ text {
157
+ layout_data :fill, :center, true, false
158
+ text 'Text1'
159
+ drag_source true
160
+ }
161
+
162
+ text {
163
+ layout_data :fill, :center, true, false
164
+ text 'Drop To Insert'
165
+ drop_target true
166
+ }
167
+
168
+ label {
169
+ text 'Drag'
170
+ }
171
+
172
+ label {
173
+ text 'Drop To Replace'
174
+ }
175
+
176
+ text {
177
+ layout_data :fill, :center, true, false
178
+ text 'Text2'
179
+ drag_source true
180
+ }
181
+
182
+ text {
183
+ layout_data :fill, :center, true, false
184
+ text 'Drop To Replace'
185
+ drop_target :replace
186
+ }
187
+ }
188
+
189
+ tab_item {
190
+ grid_layout 2, true
191
+ text 'Spinner'
192
+
193
+ label {
194
+ text 'Drag'
195
+ }
196
+
197
+ label {
198
+ text 'Drop To Insert'
199
+ }
200
+
201
+ spinner {
202
+ layout_data :fill, :center, true, false
203
+ selection 30
204
+ drag_source true
205
+ }
206
+
207
+ spinner {
208
+ layout_data :fill, :center, true, false
209
+ drop_target true
210
+ }
50
211
  }
51
212
  }
52
213
  }.open
@@ -32,10 +32,7 @@ class HelloScale
32
32
 
33
33
  body {
34
34
  shell {
35
- row_layout(:vertical) {
36
- fill true
37
- center true
38
- }
35
+ fill_layout :vertical
39
36
 
40
37
  text 'Hello, Scale!'
41
38
 
@@ -32,10 +32,7 @@ class HelloSlider
32
32
 
33
33
  body {
34
34
  shell {
35
- row_layout(:vertical) {
36
- fill true
37
- center true
38
- }
35
+ fill_layout :vertical
39
36
 
40
37
  text 'Hello, Slider!'
41
38
 
@@ -42,33 +42,31 @@ class HelloToolBar
42
42
  }
43
43
 
44
44
  text 'Hello, Tool Bar!'
45
+ minimum_size 280, 50
45
46
 
46
47
  tool_bar { # optionally takes a :flat style, :wrap style if you need wrapping upon shrinking window, and :vertical style if you need vertical layout
47
48
  tool_item {
48
- image cut_image # alternatively you can pass an image file path
49
+ image File.expand_path('./images/cut.png', __dir__), height: 16
49
50
 
50
51
  on_widget_selected do
51
52
  self.operation = 'Cut'
52
53
  end
53
54
  }
54
55
  tool_item {
55
- image copy_image # alternatively you can pass an image file path
56
+ image File.expand_path('./images/copy.png', __dir__), height: 16
56
57
 
57
58
  on_widget_selected do
58
59
  self.operation = 'Copy'
59
60
  end
60
61
  }
61
62
  tool_item {
62
- image paste_image # alternatively you can pass an image file path
63
+ image File.expand_path('./images/paste.png', __dir__), height: 16
63
64
 
64
65
  on_widget_selected do
65
66
  self.operation = 'Paste'
66
67
  end
67
68
  }
68
69
  tool_item(:separator)
69
- tool_item {
70
- text 'Font Size'
71
- }
72
70
  # a combo can be nested in a tool_bar (it auto-generates a tool_item for itself behind the scenes)
73
71
  combo {
74
72
  selection <=> [self, :font_size]
@@ -84,59 +82,15 @@ class HelloToolBar
84
82
  }
85
83
 
86
84
  def cut_image
87
- # building image on the fly with Canvas Shape DSL
88
- image(25, 25) {
89
- rectangle(0, 0, 25, 25) {
90
- background_pattern 0, 0, 0, 25, :white, :gray
91
- line(20, 2, 9, 15) {
92
- line_width 2
93
- }
94
- line(5, 2, 16, 15) {
95
- line_width 2
96
- }
97
- oval(2, 15, 8, 8) {
98
- line_width 2
99
- }
100
- oval(16, 15, 8, 8) {
101
- line_width 2
102
- }
103
- }
104
- }
85
+ File.expand_path('./images/cut.png', __dir__)
105
86
  end
106
87
 
107
88
  def copy_image
108
- # building image on the fly with Canvas Shape DSL
109
- image(25, 25) {
110
- rectangle(0, 0, 25, 25) {
111
- background_pattern 0, 0, 0, 25, :white, :gray
112
- rectangle([:default, 2], [:default, -2], 14, 14, 5, 5) {
113
- line_width 2
114
- }
115
- rectangle([:default, -2], [:default, 2], 14, 14, 5, 5) {
116
- line_width 2
117
- }
118
- }
119
- }
89
+ File.expand_path('./images/copy.png', __dir__)
120
90
  end
121
91
 
122
92
  def paste_image
123
- image(25, 25) {
124
- rectangle(0, 0, 25, 25) {
125
- background_pattern 0, 0, 0, 25, :white, :gray
126
- rectangle(:default, [:default, 1], 15, 20, 5, 5) {
127
- line_width 2
128
- }
129
- line(7, 8, 18, 8) {
130
- line_width 2
131
- }
132
- line(7, 13, 18, 13) {
133
- line_width 2
134
- }
135
- line(7, 18, 18, 18) {
136
- line_width 2
137
- }
138
- }
139
- }
93
+ File.expand_path('./images/paste.png', __dir__)
140
94
  end
141
95
  end
142
96
 
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-swt
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.21.0.1
4
+ version: 4.21.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-30 00:00:00.000000000 Z
11
+ date: 2021-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 2.1.5
18
+ version: 2.4.0
19
19
  name: glimmer
20
20
  prerelease: false
21
21
  type: :runtime
@@ -23,7 +23,7 @@ dependencies:
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.1.5
26
+ version: 2.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
@@ -376,10 +376,9 @@ description: Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a
376
376
  started quickly, Glimmer offers scaffolding options for Apps, Gems, and Custom Widgets.
377
377
  Glimmer also includes native-executable packaging support, sorely lacking in other
378
378
  libraries, thus enabling the delivery of desktop apps written in Ruby as truly native
379
- DMG/PKG/APP files on the Mac, MSI/EXE files on Windows, and Gem Packaged Shell Scripts
380
- on Linux. Glimmer was the first Ruby gem to bring SWT (Standard Widget Toolkit)
381
- to Ruby, thanks to creator Andy Maleh, EclipseCon/EclipseWorld/RubyConf speaker
382
- and expert.
379
+ DMG/PKG/APP files on the Mac, MSI/EXE files on Windows, and DEB/RPM files on Linux.
380
+ Glimmer was the first Ruby gem to bring SWT (Standard Widget Toolkit) to Ruby, thanks
381
+ to creator Andy Maleh, EclipseCon/EclipseWorld/RubyConf speaker.
383
382
  email: andy.am@gmail.com
384
383
  executables:
385
384
  - glimmer
@@ -682,6 +681,8 @@ files:
682
681
  - samples/hello/hello_tray_item.rb
683
682
  - samples/hello/hello_tree.rb
684
683
  - samples/hello/hello_world.rb
684
+ - samples/hello/images/copy.png
685
+ - samples/hello/images/cut.png
685
686
  - samples/hello/images/denmark.png
686
687
  - samples/hello/images/finland.png
687
688
  - samples/hello/images/france.png
@@ -690,6 +691,7 @@ files:
690
691
  - samples/hello/images/mexico.png
691
692
  - samples/hello/images/netherlands.png
692
693
  - samples/hello/images/norway.png
694
+ - samples/hello/images/paste.png
693
695
  - samples/hello/images/usa.png
694
696
  - sounds/metronome-down.wav
695
697
  - sounds/metronome-up.wav
@@ -726,7 +728,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
726
728
  - !ruby/object:Gem::Version
727
729
  version: '0'
728
730
  requirements: []
729
- rubygems_version: 3.2.28
731
+ rubygems_version: 3.2.29
730
732
  signing_key:
731
733
  specification_version: 4
732
734
  summary: Glimmer DSL for SWT (JRuby Desktop Development GUI Framework)