glimmer-dsl-opal 0.22.1 → 0.25.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b25cb50adf580107747fab7e5e98f1eb5d93bbf91e0a460d8ed1a3bc671bde84
4
- data.tar.gz: 12c5551fc10de17736f0186e10582e4fdbb2ec08176e33813d1cc2b77fedc523
3
+ metadata.gz: 855549b9862ac8e94af6f69dc6f7a7960137a9ae8e75885ba9df9028f6c33dbf
4
+ data.tar.gz: c212a5470ebb5bda7f44135833f65efb6a0562923c491e035650483f2d277e14
5
5
  SHA512:
6
- metadata.gz: 1f9940b3b91abb63277fddbb9186996ab5433e512f58981516bdcb24e40504c23c2960a22182fd498a255937478f0dab6e9eb5e2d499200036c619abe7724445
7
- data.tar.gz: 10608c56db367b7dea3a0a2c8b55b747eef1a2407c23ee3b88208255fc488462f4e0b6fafb3b7c741d382956ce06982b6913f870d71623f74aa7f236323f0991
6
+ metadata.gz: 2fdb36225e4b4e99e97c7a0d406f0ac19e9506cb387e29085f0701c5d8b163708e724405d51354e8e72cd47a2a5fb9d7dd20f780d6506fd5f190e35e6b3ebe3b
7
+ data.tar.gz: 11d6c36df71ce583c7dfa162bd5a7db6ad98530e45c923f9625ac30958fcaf64a22fd82df2bc8448d06b36ab69009fd00a1a936ab268c335deb2891b54141981
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.25.1
4
+
5
+ - Support `progress_bar` `:vertical` SWT style
6
+ - Add `progress_bar` `:vertical` SWT style to Hello, Progress Bar!
7
+
8
+ ## 0.25.0
9
+
10
+ - Support `progress_bar` widget without `:vertical` SWT style support
11
+ - Hello, Progress Bar! sample without `:vertical` SWT style
12
+
13
+ ## 0.24.0
14
+
15
+ - `widget#print` method
16
+ - Hello, Print! sample
17
+
18
+ ## 0.23.0
19
+
20
+ - Hello, Label! sample
21
+ - Support `label` `:separator` SWT style along with `:horizontal` or `:vertical`
22
+ - Support `label` `image` attribute
23
+
3
24
  ## 0.22.1
4
25
 
5
26
  - User Profile elaborate sample
data/README.md CHANGED
@@ -143,7 +143,7 @@ Hello, Table! Game Booked
143
143
 
144
144
  NOTE: Glimmer DSL for Opal is an alpha project. Please help make better by contributing, adopting for small or low risk projects, and providing feedback. It is still an early alpha, so the more feedback and issues you report the better.
145
145
 
146
- **Alpha Version** 0.22.1 only supports bare-minimum capabilities for the included [samples](https://github.com/AndyObtiva/glimmer-dsl-opal#samples) (originally written for [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt))
146
+ **Alpha Version** 0.25.1 only supports bare-minimum capabilities for the included [samples](https://github.com/AndyObtiva/glimmer-dsl-opal#samples) (originally written for [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt))
147
147
 
148
148
  Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
149
149
  - [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt): Glimmer DSL for SWT (JRuby Desktop Development GUI Framework)
@@ -166,6 +166,7 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
166
166
  - [Hello, Composite!](#hello-composite)
167
167
  - [Hello, Computed!](#hello-computed)
168
168
  - [Hello, Cursor!](#hello-cursor)
169
+ - [Hello, Label!](#hello-label)
169
170
  - [Hello, Layout!](#hello-layout)
170
171
  - [Hello, List Single Selection!](#hello-list-single-selection)
171
172
  - [Hello, List Multi Selection!](#hello-list-multi-selection)
@@ -186,6 +187,8 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
186
187
  - [Hello, Arrow!](#hello-arrow)
187
188
  - [Hello, Message Box!](#hello-message-box)
188
189
  - [Hello, Pop Up Context Menu!](#hello-pop-up-context-menu)
190
+ - [Hello, Print!](#hello-print)
191
+ - [Hello, Progress Bar!](#hello-progress-bar)
189
192
  - [Hello, Menu Bar!](#hello-menu-bar)
190
193
  - [Hello, Dialog!](#hello-dialog)
191
194
  - [Elaborate Samples](#elaborate-samples)
@@ -261,9 +264,9 @@ Add the following to `Gemfile`:
261
264
  ```
262
265
  gem 'opal', '1.0.4'
263
266
  gem 'opal-rails', '1.1.2'
264
- gem 'opal-async', '~> 1.2.0'
267
+ gem 'opal-async', '~> 1.3.0'
265
268
  gem 'opal-jquery', '~> 0.4.4'
266
- gem 'glimmer-dsl-opal', '~> 0.22.1'
269
+ gem 'glimmer-dsl-opal', '~> 0.25.1'
267
270
  gem 'glimmer-dsl-xml', '~> 1.2.0', require: false
268
271
  gem 'glimmer-dsl-css', '~> 1.2.0', require: false
269
272
 
@@ -471,9 +474,9 @@ class HelloCombo
471
474
 
472
475
  include Glimmer::UI::CustomShell
473
476
 
474
- before_body {
477
+ before_body do
475
478
  @person = Person.new
476
- }
479
+ end
477
480
 
478
481
  body {
479
482
  shell {
@@ -577,13 +580,13 @@ class HelloComputed
577
580
 
578
581
  include Glimmer::UI::CustomShell
579
582
 
580
- before_body {
583
+ before_body do
581
584
  @contact = Contact.new(
582
585
  first_name: 'Barry',
583
586
  last_name: 'McKibbin',
584
587
  year_of_birth: 1985
585
588
  )
586
- }
589
+ end
587
590
 
588
591
  body {
589
592
  shell {
@@ -599,51 +602,43 @@ class HelloComputed
599
602
 
600
603
  label {text 'First &Name: '}
601
604
  text {
605
+ fill_horizontally_layout_data
602
606
  text <=> [@contact, :first_name]
603
- layout_data {
604
- horizontal_alignment :fill
605
- grab_excess_horizontal_space true
606
- }
607
607
  }
608
608
 
609
609
  label {text '&Last Name: '}
610
610
  text {
611
+ fill_horizontally_layout_data
611
612
  text <=> [@contact, :last_name]
612
- layout_data {
613
- horizontal_alignment :fill
614
- grab_excess_horizontal_space true
615
- }
616
613
  }
617
614
 
618
615
  label {text '&Year of Birth: '}
619
616
  text {
617
+ fill_horizontally_layout_data
620
618
  text <=> [@contact, :year_of_birth]
621
- layout_data {
622
- horizontal_alignment :fill
623
- grab_excess_horizontal_space true
624
- }
625
619
  }
626
620
 
627
621
  label {text 'Name: '}
628
622
  label {
623
+ fill_horizontally_layout_data
629
624
  text <= [@contact, :name, computed_by: [:first_name, :last_name]]
630
- layout_data {
631
- horizontal_alignment :fill
632
- grab_excess_horizontal_space true
633
- }
634
625
  }
635
626
 
636
627
  label {text 'Age: '}
637
628
  label {
629
+ fill_horizontally_layout_data
638
630
  text <= [@contact, :age, on_write: :to_i, computed_by: [:year_of_birth]]
639
- layout_data {
640
- horizontal_alignment :fill
641
- grab_excess_horizontal_space true
642
- }
643
631
  }
644
632
  }
645
633
  }
646
634
  }
635
+
636
+ def fill_horizontally_layout_data
637
+ layout_data {
638
+ horizontal_alignment :fill
639
+ grab_excess_horizontal_space true
640
+ }
641
+ end
647
642
  end
648
643
 
649
644
  HelloComputed.launch
@@ -691,6 +686,56 @@ You should see "Hello, Cursor!"
691
686
 
692
687
  ![Glimmer DSL for Opal Hello Cursor](images/glimmer-dsl-opal-hello-cursor.gif)
693
688
 
689
+ #### Hello, Label!
690
+
691
+ Add the following require statement to `app/assets/javascripts/application.rb`
692
+
693
+
694
+ ```ruby
695
+ require 'glimmer-dsl-opal/samples/hello/hello_label'
696
+ ```
697
+
698
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
699
+
700
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-left-aligned.png)
701
+
702
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-center-aligned.png)
703
+
704
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-right-aligned.png)
705
+
706
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-images.png)
707
+
708
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-background_images.png)
709
+
710
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-horizontal-separator.png)
711
+
712
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-vertical-separator.png)
713
+
714
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
715
+
716
+ Start the Rails server:
717
+ ```
718
+ rails s
719
+ ```
720
+
721
+ Visit `http://localhost:3000`
722
+
723
+ You should see "Hello, Label!"
724
+
725
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-left-aligned.png)
726
+
727
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-center-aligned.png)
728
+
729
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-right-aligned.png)
730
+
731
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-images.png)
732
+
733
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-background_images.png)
734
+
735
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-horizontal-separator.png)
736
+
737
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-vertical-separator.png)
738
+
694
739
  #### Hello, Layout!
695
740
 
696
741
  Add the following require statement to `app/assets/javascripts/application.rb`
@@ -1790,6 +1835,52 @@ You should see "Hello, Message Box!"
1790
1835
  ![Glimmer DSL for Opal Hello Message Box](images/glimmer-dsl-opal-hello-message-box.png)
1791
1836
  ![Glimmer DSL for Opal Hello Message Box Dialog](images/glimmer-dsl-opal-hello-message-box-dialog.png)
1792
1837
 
1838
+ #### Hello, Print!
1839
+
1840
+ Add the following require statement to `app/assets/javascripts/application.rb`
1841
+
1842
+ ```ruby
1843
+ require 'glimmer-dsl-opal/samples/hello/hello_print'
1844
+ ```
1845
+
1846
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
1847
+
1848
+ ![Glimmer DSL for SWT Hello Print](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-print.png)
1849
+
1850
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
1851
+
1852
+ Start the Rails server:
1853
+ ```
1854
+ rails s
1855
+ ```
1856
+
1857
+ Visit `http://localhost:3000`
1858
+
1859
+ You should see "Hello, Print!"
1860
+
1861
+ #### Hello, Progress Bar!
1862
+
1863
+ Add the following require statement to `app/assets/javascripts/application.rb`
1864
+
1865
+ ```ruby
1866
+ require 'glimmer-dsl-opal/samples/hello/hello_progress_bar'
1867
+ ```
1868
+
1869
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
1870
+
1871
+ ![Glimmer DSL for SWT Hello Progress Bar](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-progress-bar.gif)
1872
+
1873
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
1874
+
1875
+ Start the Rails server:
1876
+ ```
1877
+ rails s
1878
+ ```
1879
+
1880
+ Visit `http://localhost:3000`
1881
+
1882
+ You should see "Hello, Progress Bar!"
1883
+
1793
1884
  #### Hello, Pop Up Context Menu!
1794
1885
 
1795
1886
  Add the following require statement to `app/assets/javascripts/application.rb`
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.22.1
1
+ 0.25.1
@@ -35,9 +35,9 @@ class HelloCombo
35
35
 
36
36
  include Glimmer::UI::CustomShell
37
37
 
38
- before_body {
38
+ before_body do
39
39
  @person = Person.new
40
- }
40
+ end
41
41
 
42
42
  body {
43
43
  shell {
@@ -42,13 +42,13 @@ class HelloComputed
42
42
 
43
43
  include Glimmer::UI::CustomShell
44
44
 
45
- before_body {
45
+ before_body do
46
46
  @contact = Contact.new(
47
47
  first_name: 'Barry',
48
48
  last_name: 'McKibbin',
49
49
  year_of_birth: 1985
50
50
  )
51
- }
51
+ end
52
52
 
53
53
  body {
54
54
  shell {
@@ -64,51 +64,43 @@ class HelloComputed
64
64
 
65
65
  label {text 'First &Name: '}
66
66
  text {
67
+ fill_horizontally_layout_data
67
68
  text <=> [@contact, :first_name]
68
- layout_data {
69
- horizontal_alignment :fill
70
- grab_excess_horizontal_space true
71
- }
72
69
  }
73
70
 
74
71
  label {text '&Last Name: '}
75
72
  text {
73
+ fill_horizontally_layout_data
76
74
  text <=> [@contact, :last_name]
77
- layout_data {
78
- horizontal_alignment :fill
79
- grab_excess_horizontal_space true
80
- }
81
75
  }
82
76
 
83
77
  label {text '&Year of Birth: '}
84
78
  text {
79
+ fill_horizontally_layout_data
85
80
  text <=> [@contact, :year_of_birth]
86
- layout_data {
87
- horizontal_alignment :fill
88
- grab_excess_horizontal_space true
89
- }
90
81
  }
91
82
 
92
83
  label {text 'Name: '}
93
84
  label {
85
+ fill_horizontally_layout_data
94
86
  text <= [@contact, :name, computed_by: [:first_name, :last_name]]
95
- layout_data {
96
- horizontal_alignment :fill
97
- grab_excess_horizontal_space true
98
- }
99
87
  }
100
88
 
101
89
  label {text 'Age: '}
102
90
  label {
91
+ fill_horizontally_layout_data
103
92
  text <= [@contact, :age, on_write: :to_i, computed_by: [:year_of_birth]]
104
- layout_data {
105
- horizontal_alignment :fill
106
- grab_excess_horizontal_space true
107
- }
108
93
  }
109
94
  }
110
95
  }
111
96
  }
97
+
98
+ def fill_horizontally_layout_data
99
+ layout_data {
100
+ horizontal_alignment :fill
101
+ grab_excess_horizontal_space true
102
+ }
103
+ end
112
104
  end
113
105
 
114
106
  HelloComputed.launch
@@ -0,0 +1,192 @@
1
+ # Copyright (c) 2020-2021 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
+ class HelloLabel
23
+ include Glimmer::UI::CustomShell
24
+
25
+ body {
26
+ shell {
27
+ text 'Hello, Label!'
28
+
29
+ tab_folder {
30
+ tab_item {
31
+ text 'left-aligned'
32
+
33
+ grid_layout 2, true
34
+
35
+ 1.upto(3) do |n|
36
+ label(:left) { # :left is default in English, so it is unnecessary
37
+ layout_data :fill, :center, true, false
38
+ text "Field #{n}"
39
+ }
40
+ text {
41
+ layout_data :fill, :center, true, false
42
+ text "Enter Field #{n}"
43
+ }
44
+ end
45
+ }
46
+
47
+ tab_item {
48
+ text 'center-aligned'
49
+
50
+ grid_layout 2, true
51
+
52
+ 1.upto(3) do |n|
53
+ label(:center) {
54
+ layout_data :fill, :center, true, false
55
+ text "Field #{n}"
56
+ }
57
+ text {
58
+ layout_data :fill, :center, true, false
59
+ text "Enter Field #{n}"
60
+ }
61
+ end
62
+ }
63
+
64
+ tab_item {
65
+ text 'right-aligned'
66
+
67
+ grid_layout 2, true
68
+
69
+ 1.upto(3) do |n|
70
+ label(:right) {
71
+ layout_data :fill, :center, true, false
72
+ text "Field #{n}"
73
+ }
74
+ text {
75
+ layout_data :fill, :center, true, false
76
+ text "Enter Field #{n}"
77
+ }
78
+ end
79
+ }
80
+
81
+ tab_item {
82
+ text 'images'
83
+
84
+ grid_layout 2, true
85
+
86
+ ['denmark', 'finland', 'norway'].each do |image_name|
87
+ label {
88
+ layout_data :center, :center, true, false
89
+ image File.expand_path("images/#{image_name}.png", __dir__)
90
+ }
91
+ text {
92
+ layout_data :fill, :center, true, false
93
+ text "Enter Field #{image_name.capitalize}"
94
+ }
95
+ end
96
+ }
97
+
98
+ tab_item {
99
+ text 'background images'
100
+
101
+ grid_layout 2, true
102
+
103
+ ['italy', 'france', 'mexico'].each do |image_name|
104
+ label {
105
+ layout_data :center, :center, true, false
106
+ background_image File.expand_path("images/#{image_name}.png", __dir__)
107
+ text image_name.capitalize
108
+ font height: 26, style: :bold
109
+ }
110
+ text {
111
+ layout_data :fill, :center, true, false
112
+ text "Enter Field #{image_name.capitalize}"
113
+ }
114
+ end
115
+ }
116
+
117
+ tab_item {
118
+ text 'horizontal separator'
119
+
120
+ grid_layout 2, true
121
+
122
+ label {
123
+ layout_data :fill, :center, true, false
124
+ text "Field 1"
125
+ }
126
+ text {
127
+ layout_data :fill, :center, true, false
128
+ text "Enter Field 1"
129
+ }
130
+
131
+ label(:separator, :horizontal) {
132
+ layout_data(:fill, :center, true, false) {
133
+ horizontal_span 2
134
+ }
135
+ }
136
+
137
+ label {
138
+ layout_data :fill, :center, true, false
139
+ text "Field 2"
140
+ }
141
+ text {
142
+ layout_data :fill, :center, true, false
143
+ text "Enter Field 2"
144
+ }
145
+ }
146
+
147
+ tab_item {
148
+ text 'vertical separator'
149
+
150
+ grid_layout 3, true
151
+
152
+ label {
153
+ layout_data :fill, :center, true, false
154
+ text "Field 1"
155
+ }
156
+ label(:separator, :vertical) {
157
+ layout_data(:center, :center, false, false) {
158
+ vertical_span 3
159
+ }
160
+ }
161
+ text {
162
+ layout_data :fill, :center, true, false
163
+ text "Enter Field 1"
164
+ }
165
+
166
+ label {
167
+ layout_data :fill, :center, true, false
168
+ text "Field 2"
169
+ }
170
+ text {
171
+ layout_data :fill, :center, true, false
172
+ text "Enter Field 2"
173
+ }
174
+
175
+ label {
176
+ layout_data :fill, :center, true, false
177
+ text "Field 3"
178
+ }
179
+ text {
180
+ layout_data :fill, :center, true, false
181
+ text "Enter Field 3"
182
+ }
183
+ }
184
+
185
+ }
186
+
187
+ }
188
+
189
+ }
190
+ end
191
+
192
+ HelloLabel.launch
@@ -0,0 +1,58 @@
1
+ # Copyright (c) 2020-2021 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
+ class HelloPrint
23
+ include Glimmer::UI::CustomShell
24
+
25
+ body {
26
+ shell {
27
+ text 'Hello, Print!'
28
+ @composite = composite {
29
+ row_layout(:vertical) {
30
+ fill true
31
+ center true
32
+ }
33
+
34
+ label(:center) {
35
+ text "Whatever you see inside the app composite\nwill get printed when clicking the Print button."
36
+ font height: 16
37
+ }
38
+
39
+ button {
40
+ text 'Print'
41
+
42
+ on_widget_selected do
43
+ # Unlike the SWT version, Opal's print always prints the entire window no matter what widget
44
+ # the print method is invoked from
45
+ unless @composite.print
46
+ message_box {
47
+ text 'Unable To Print'
48
+ message 'Sorry! Printing is not supported on this platform!'
49
+ }.open
50
+ end
51
+ end
52
+ }
53
+ }
54
+ }
55
+ }
56
+ end
57
+
58
+ HelloPrint.launch
@@ -0,0 +1,126 @@
1
+ # Copyright (c) 2020-2021 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
+ class HelloProgressBar
23
+ include Glimmer::UI::CustomShell
24
+
25
+ class ProgressModel
26
+ attr_accessor :minimum, :maximum, :selection, :delay
27
+ end
28
+
29
+ before_body do
30
+ @progress_model = ProgressModel.new
31
+ @progress_model.minimum = 0
32
+ @progress_model.maximum = 100
33
+ @progress_model.selection = 0
34
+ @progress_model.delay = 0.01
35
+ end
36
+
37
+ body {
38
+ shell {
39
+ grid_layout(4, true)
40
+
41
+ text 'Hello, Progress Bar!'
42
+
43
+ progress_bar(:indeterminate) {
44
+ layout_data(:fill, :center, true, false) {
45
+ horizontal_span 4
46
+ }
47
+ }
48
+
49
+ label {
50
+ text 'Minimum'
51
+ }
52
+
53
+ label {
54
+ text 'Maximum'
55
+ }
56
+
57
+ label {
58
+ text 'Selection'
59
+ }
60
+
61
+ label {
62
+ text 'Delay in Seconds'
63
+ }
64
+
65
+ spinner {
66
+ selection <=> [@progress_model, :minimum]
67
+ }
68
+
69
+ spinner {
70
+ selection <=> [@progress_model, :maximum]
71
+ }
72
+
73
+ spinner {
74
+ selection <=> [@progress_model, :selection]
75
+ }
76
+
77
+ spinner {
78
+ digits 2
79
+ minimum 1
80
+ maximum 200
81
+ selection <=> [@progress_model, :delay, on_read: ->(v) {v.to_f*100.0}, on_write: ->(v) {v.to_f/100.0}]
82
+ }
83
+
84
+ progress_bar {
85
+ layout_data(:fill, :center, true, false) {
86
+ horizontal_span 4
87
+ }
88
+ minimum <= [@progress_model, :minimum]
89
+ maximum <= [@progress_model, :maximum]
90
+ selection <= [@progress_model, :selection]
91
+ }
92
+
93
+ # :vertical SWT style is unsupported for now
94
+ progress_bar(:vertical) {
95
+ layout_data(:fill, :center, true, false) {
96
+ horizontal_span 4
97
+ }
98
+ minimum <= [@progress_model, :minimum]
99
+ maximum <= [@progress_model, :maximum]
100
+ selection <= [@progress_model, :selection]
101
+ }
102
+
103
+ button {
104
+ layout_data(:fill, :center, true, false) {
105
+ horizontal_span 4
106
+ }
107
+ text "Start"
108
+
109
+ on_widget_selected do
110
+ # if a previous thread is running, then kill first
111
+ # (killing is not dangerous since it is only a thread about updating progress)
112
+ @current_thread&.kill
113
+ @current_thread = Thread.new do
114
+ @progress_model.selection = @progress_model.minimum
115
+ (@progress_model.minimum..@progress_model.maximum).to_a.each do |n|
116
+ @progress_model.selection = n
117
+ sleep(@progress_model.delay)
118
+ end
119
+ end
120
+ end
121
+ }
122
+ }
123
+ }
124
+ end
125
+
126
+ HelloProgressBar.launch
@@ -28,7 +28,7 @@ module Glimmer
28
28
  attr_accessor :closeable
29
29
 
30
30
  def initialize(parent, args, block)
31
- @closeable = args.detect { |arg| SWTProxy[:close] == SWTProxy[arg] }
31
+ @closeable = args.detect { |arg| SWTProxy[arg] == SWTProxy[:close] }
32
32
  super(parent, args, block)
33
33
  # TODO attach listener if :close style is set
34
34
  close_dom_element.on('click') { dispose }
@@ -25,43 +25,39 @@ require 'glimmer/swt/widget_proxy'
25
25
  module Glimmer
26
26
  module SWT
27
27
  class LabelProxy < WidgetProxy
28
- attr_reader :text, :background_image, :image
28
+ attr_reader :text, :background_image, :image, :separator, :vertical
29
+ alias separator? separator
30
+ alias vertical? vertical
29
31
 
30
32
  def initialize(parent, args, block)
33
+ @separator = args.detect { |arg| SWTProxy[arg] == SWTProxy[:separator] }
34
+ @vertical = args.detect { |arg| SWTProxy[arg] == SWTProxy[:vertical] }
31
35
  super(parent, args, block)
32
36
  end
37
+
38
+ def horizontal
39
+ !vertical
40
+ end
41
+ alias horizontal? horizontal
33
42
 
34
43
  def text=(value)
35
44
  @text = value
36
- dom_element.html(html_text) # TODO deal with issue of handling lines and escaping at the same time
45
+ dom_element.html(html_text) unless @image
37
46
  end
38
47
 
39
48
  def html_text
40
49
  text && CGI.escape_html(text).gsub("\n", '<br />')
41
50
  end
42
51
 
43
- # def background_image=(*image_options)
44
- # TODO consider if there is a difference between background_image and image in label and to have one reuse the other
45
- # TODO finish implementation
46
- # @background_image = Glimmer::SWT::ImageProxy.create(*image_options)
47
- # dom_element.css('background-image', @background_image.image_data.dom_element.src)
48
- # end
49
-
50
- def image=(*image_options)
51
- # TODO finish implementation
52
- # @image = Glimmer::SWT::ImageProxy.create(*image_options)
53
- # dom_element.css('background-image', @image.image_data.dom_element.src)
54
- end
55
-
56
- # background image
57
- def background_image
58
- @background_image
52
+ def image=(value)
53
+ @image = value
54
+ dom_element.html("<img src='#{@image}' />")
59
55
  end
60
56
 
61
57
  # background image is stretched by default
62
58
  def background_image=(value)
63
59
  @background_image = value
64
- dom_element.css('background-image', "url(#{background_image})")
60
+ dom_element.css('background-image', "url(#{@background_image})")
65
61
  dom_element.css('background-repeat', 'no-repeat')
66
62
  dom_element.css('background-size', 'cover')
67
63
  end
@@ -88,8 +84,11 @@ module Glimmer
88
84
  def dom
89
85
  label_id = id
90
86
  label_class = name
87
+ label_style = "text-align: #{alignment}; "
88
+ label_style += "border-top: 1px solid rgb(207, 207, 207); " if separator? && horizontal?
89
+ label_style += "border-right: 1px solid rgb(207, 207, 207); height: 100%; " if separator? && vertical?
91
90
  @dom ||= html {
92
- label(id: label_id, class: label_class, style: "text-align: #{alignment};") {
91
+ label(id: label_id, class: label_class, style: label_style) {
93
92
  html_text
94
93
  }
95
94
  }.to_s
@@ -0,0 +1,105 @@
1
+ # Copyright (c) 2020-2021 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/swt/widget_proxy'
23
+
24
+ module Glimmer
25
+ module SWT
26
+ class ProgressBarProxy < WidgetProxy
27
+ STYLE = <<~CSS
28
+ .ui-progressbar.vertical {
29
+ transform: rotate(-180deg);
30
+ height: 140px;
31
+ width: 28px;
32
+ margin-left: auto;
33
+ margin-right: auto;
34
+ }
35
+ CSS
36
+
37
+ attr_reader :vertical, :indeterminate, :maximum, :selection
38
+ attr_accessor :state, :minimum #ignored, only there for API compatibility
39
+ alias vertical? vertical
40
+ alias indeterminate? indeterminate
41
+
42
+ def initialize(parent, args, block)
43
+ @vertical = args.detect { |arg| SWTProxy[arg] == SWTProxy[:vertical] }
44
+ @indeterminate = args.detect { |arg| SWTProxy[arg] == SWTProxy[:indeterminate] }
45
+ super(parent, args, block)
46
+ # initialize manually if vertical
47
+ dom_element.progressbar if horizontal?
48
+ self.minimum = 0
49
+ self.selection = false if indeterminate?
50
+ end
51
+
52
+ def horizontal
53
+ !vertical
54
+ end
55
+ alias horizontal? horizontal
56
+
57
+ def minimum=(value)
58
+ @minimum = value
59
+ # re-update maximum and selection since they depend on minimum
60
+ self.maximum = @maximum if @maximum
61
+ self.selection = @selection if @selection
62
+ end
63
+
64
+ def maximum=(value)
65
+ @maximum = value
66
+ if horizontal?
67
+ dom_element.progressbar('option', 'max', @maximum - @minimum)
68
+ end
69
+ end
70
+
71
+ def selection=(selection_value)
72
+ @selection = selection_value
73
+ if horizontal?
74
+ value = @selection ? (@selection - @minimum) : @selection
75
+ dom_element.progressbar('option', 'value', value)
76
+ else
77
+ value = ((@selection - @minimum) / (@maximum - @minimum)) * 100
78
+ selection_dom_element.css('height', "#{value}%")
79
+ end
80
+ end
81
+
82
+ def element
83
+ 'div'
84
+ end
85
+
86
+ def selection_dom_element
87
+ dom_element.find('.ui-progressbar-value')
88
+ end
89
+
90
+ def dom
91
+ progress_bar_id = id
92
+ progress_bar_class = name
93
+ progress_bar_class += ' vertical ui-progressbar ui-corner-all ui-widget ui-widget-content' if vertical?
94
+ progress_bar_class += ' indeterminate' if indeterminate?
95
+ @dom ||= html {
96
+ div(id: progress_bar_id, class: progress_bar_class) {
97
+ if vertical?
98
+ div(class: 'ui-progressbar-value ui-corner-left ui-widget-header', style: 'height: 0%;')
99
+ end
100
+ }
101
+ }.to_s
102
+ end
103
+ end
104
+ end
105
+ end
@@ -241,6 +241,11 @@ module Glimmer
241
241
  def dialog_ancestor
242
242
  parents.detect {|p| p.is_a?(DialogProxy)}
243
243
  end
244
+
245
+ def print
246
+ `window.print()`
247
+ true
248
+ end
244
249
 
245
250
  def enabled=(value)
246
251
  @enabled = value
@@ -1032,6 +1037,7 @@ require 'glimmer/swt/table_column_proxy'
1032
1037
  require 'glimmer/swt/table_item_proxy'
1033
1038
  require 'glimmer/swt/table_proxy'
1034
1039
  require 'glimmer/swt/text_proxy'
1040
+ require 'glimmer/swt/progress_bar_proxy'
1035
1041
  require 'glimmer/swt/radio_proxy'
1036
1042
  require 'glimmer/swt/scale_proxy'
1037
1043
  require 'glimmer/swt/scrolled_composite_proxy'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.1
4
+ version: 0.25.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-17 00:00:00.000000000 Z
11
+ date: 2021-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.0
61
+ version: 1.3.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2.0
68
+ version: 1.3.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: to_collection
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -301,12 +301,15 @@ files:
301
301
  - lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb
302
302
  - lib/glimmer-dsl-opal/samples/hello/hello_dialog.rb
303
303
  - lib/glimmer-dsl-opal/samples/hello/hello_group.rb
304
+ - lib/glimmer-dsl-opal/samples/hello/hello_label.rb
304
305
  - lib/glimmer-dsl-opal/samples/hello/hello_layout.rb
305
306
  - lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb
306
307
  - lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb
307
308
  - lib/glimmer-dsl-opal/samples/hello/hello_menu_bar.rb
308
309
  - lib/glimmer-dsl-opal/samples/hello/hello_message_box.rb
309
310
  - lib/glimmer-dsl-opal/samples/hello/hello_pop_up_context_menu.rb
311
+ - lib/glimmer-dsl-opal/samples/hello/hello_print.rb
312
+ - lib/glimmer-dsl-opal/samples/hello/hello_progress_bar.rb
310
313
  - lib/glimmer-dsl-opal/samples/hello/hello_radio.rb
311
314
  - lib/glimmer-dsl-opal/samples/hello/hello_radio_group.rb
312
315
  - lib/glimmer-dsl-opal/samples/hello/hello_scale.rb
@@ -420,6 +423,7 @@ files:
420
423
  - lib/glimmer/swt/menu_proxy.rb
421
424
  - lib/glimmer/swt/message_box_proxy.rb
422
425
  - lib/glimmer/swt/point.rb
426
+ - lib/glimmer/swt/progress_bar_proxy.rb
423
427
  - lib/glimmer/swt/property_owner.rb
424
428
  - lib/glimmer/swt/radio_proxy.rb
425
429
  - lib/glimmer/swt/row_layout_proxy.rb