glimmer-dsl-opal 0.20.1 → 0.23.0

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: dbd180470d6421bf31347afe95c80b1c3d017f5a440ea70adfaf5f2f9c61c773
4
- data.tar.gz: fed3355d1102131fcce5814893a69e8a4d3a0462b2f5ac1293c44e3d7b132b59
3
+ metadata.gz: 97154ebca855643dd407d82d30a6d7e127814fe5365bec2020a9f5ac14a20fbf
4
+ data.tar.gz: bc7dc89a573bff5406666a6b59ecf8cfc623493f6f680190ce42655236f79dec
5
5
  SHA512:
6
- metadata.gz: 353ca4a775c9e96bf2cdee78c4d936dd4a58a25ca4c80f0acb4e2017f476f48d43f1da20475b91bd4568cb3dbc1fead4d403df358dab5a763f114039de238c92
7
- data.tar.gz: be5b5b268fb9772a1140c0880d7fabb477de96e4b719831a836daf0b4f8d021741ef0eaaf8cc641a9378100841167e33b15f7fc3b3e1bd3e7c97fa25db2af5fb
6
+ metadata.gz: 65032ea2c5274c6d4b168225d321dbeb586084d7af987cd06fdc8f5cd9f640b7d1aabb5bb46de18c18b7e36116b337dacb39cfd48ac7a98afbd18a2c6cd666ef
7
+ data.tar.gz: 2d663340cc508c4a7c20b4dfd7878ef52c2084868921610d07a2765b9a62e28902b1f2b4c4959f8b18e5ccbe7efe9152d848b588a795a9cfea9f1b9a7c281e6e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.23.0
4
+
5
+ - Hello, Label! sample
6
+ - Support `label` `:separator` SWT style along with `:horizontal` or `:vertical`
7
+ - Support `label` `image` attribute
8
+
9
+ ## 0.22.1
10
+
11
+ - User Profile elaborate sample
12
+
13
+ ## 0.22.0
14
+
15
+ - Support widget `cursor` attribute
16
+ - Hello, Cursor! sample
17
+
18
+ ## 0.21.0
19
+
20
+ - Support `scale` widget
21
+ - Hello, Scale!
22
+ - Support `slider` widget
23
+ - Hello, Slider!
24
+
3
25
  ## 0.20.1
4
26
 
5
27
  - Support `spinner` automatic insertion of decimal point when `digits` attribute is specified
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.20.0 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.23.0 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)
@@ -165,6 +165,8 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
165
165
  - [Hello, Combo!](#hello-combo)
166
166
  - [Hello, Composite!](#hello-composite)
167
167
  - [Hello, Computed!](#hello-computed)
168
+ - [Hello, Cursor!](#hello-cursor)
169
+ - [Hello, Label!](#hello-label)
168
170
  - [Hello, Layout!](#hello-layout)
169
171
  - [Hello, List Single Selection!](#hello-list-single-selection)
170
172
  - [Hello, List Multi Selection!](#hello-list-multi-selection)
@@ -189,8 +191,9 @@ Other [Glimmer](https://github.com/AndyObtiva/glimmer) DSL gems:
189
191
  - [Hello, Dialog!](#hello-dialog)
190
192
  - [Elaborate Samples](#elaborate-samples)
191
193
  - [Login](#login)
192
- - [Tic Tac Toe](#tic-tac-toe)
193
194
  - [Contact Manager](#contact-manager)
195
+ - [Tic Tac Toe](#tic-tac-toe)
196
+ - [User Profile](#user-profile)
194
197
  - [Weather](#weather)
195
198
  - [External Samples](#external-samples)
196
199
  - [Glimmer Calculator](#glimmer-calculator)
@@ -261,7 +264,7 @@ gem 'opal', '1.0.4'
261
264
  gem 'opal-rails', '1.1.2'
262
265
  gem 'opal-async', '~> 1.2.0'
263
266
  gem 'opal-jquery', '~> 0.4.4'
264
- gem 'glimmer-dsl-opal', '~> 0.20.0'
267
+ gem 'glimmer-dsl-opal', '~> 0.23.0'
265
268
  gem 'glimmer-dsl-xml', '~> 1.2.0', require: false
266
269
  gem 'glimmer-dsl-css', '~> 1.2.0', require: false
267
270
 
@@ -663,6 +666,82 @@ You should see "Hello, Computed!"
663
666
 
664
667
  ![Glimmer DSL for Opal Hello Computed](images/glimmer-dsl-opal-hello-computed.png)
665
668
 
669
+ #### Hello, Cursor!
670
+
671
+ Add the following require statement to `app/assets/javascripts/application.rb`
672
+
673
+
674
+ ```ruby
675
+ require 'glimmer-dsl-opal/samples/hello/hello_cursor'
676
+ ```
677
+
678
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
679
+
680
+ ![Glimmer DSL for SWT Hello Cursor](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-cursor.gif)
681
+
682
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
683
+
684
+ Start the Rails server:
685
+ ```
686
+ rails s
687
+ ```
688
+
689
+ Visit `http://localhost:3000`
690
+
691
+ You should see "Hello, Cursor!"
692
+
693
+ ![Glimmer DSL for Opal Hello Cursor](images/glimmer-dsl-opal-hello-cursor.gif)
694
+
695
+ #### Hello, Label!
696
+
697
+ Add the following require statement to `app/assets/javascripts/application.rb`
698
+
699
+
700
+ ```ruby
701
+ require 'glimmer-dsl-opal/samples/hello/hello_label'
702
+ ```
703
+
704
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
705
+
706
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-left-aligned.png)
707
+
708
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-center-aligned.png)
709
+
710
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-right-aligned.png)
711
+
712
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-images.png)
713
+
714
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-background_images.png)
715
+
716
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-horizontal-separator.png)
717
+
718
+ ![Glimmer DSL for SWT Hello Label](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-label-vertical-separator.png)
719
+
720
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
721
+
722
+ Start the Rails server:
723
+ ```
724
+ rails s
725
+ ```
726
+
727
+ Visit `http://localhost:3000`
728
+
729
+ You should see "Hello, Label!"
730
+
731
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-left-aligned.png)
732
+
733
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-center-aligned.png)
734
+
735
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-right-aligned.png)
736
+
737
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-images.png)
738
+
739
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-background_images.png)
740
+
741
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-horizontal-separator.png)
742
+
743
+ ![Glimmer DSL for Opal Hello Label](images/glimmer-dsl-opal-hello-label-vertical-separator.png)
744
+
666
745
  #### Hello, Layout!
667
746
 
668
747
  Add the following require statement to `app/assets/javascripts/application.rb`
@@ -799,6 +878,56 @@ You should see "Hello, Arrow!"
799
878
 
800
879
  ![Glimmer DSL for Opal Hello Arrow](images/glimmer-dsl-opal-hello-arrow-item-selected.png)
801
880
 
881
+ #### Hello, Scale!
882
+
883
+ Add the following require statement to `app/assets/javascripts/application.rb`
884
+
885
+ ```ruby
886
+ require 'glimmer-dsl-opal/samples/hello/hello_scale'
887
+ ```
888
+
889
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
890
+
891
+ ![Glimmer DSL for SWT Hello Scale](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-scale.png)
892
+
893
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
894
+
895
+ Start the Rails server:
896
+ ```
897
+ rails s
898
+ ```
899
+
900
+ Visit `http://localhost:3000`
901
+
902
+ You should see "Hello, Scale!"
903
+
904
+ ![Glimmer DSL for Opal Hello Scale](images/glimmer-dsl-opal-hello-scale.png)
905
+
906
+ #### Hello, Slider!
907
+
908
+ Add the following require statement to `app/assets/javascripts/application.rb`
909
+
910
+ ```ruby
911
+ require 'glimmer-dsl-opal/samples/hello/hello_slider'
912
+ ```
913
+
914
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
915
+
916
+ ![Glimmer DSL for SWT Hello Slider](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-hello-slider.png)
917
+
918
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
919
+
920
+ Start the Rails server:
921
+ ```
922
+ rails s
923
+ ```
924
+
925
+ Visit `http://localhost:3000`
926
+
927
+ You should see "Hello, Slider!"
928
+
929
+ ![Glimmer DSL for Opal Hello Slider](images/glimmer-dsl-opal-hello-slider.png)
930
+
802
931
  #### Hello, Spinner!
803
932
 
804
933
  Add the following require statement to `app/assets/javascripts/application.rb`
@@ -2350,36 +2479,6 @@ You should see "Login" dialog
2350
2479
  ![Glimmer DSL for Opal Login Filled In](images/glimmer-dsl-opal-login-filled-in.png)
2351
2480
  ![Glimmer DSL for Opal Login Logged In](images/glimmer-dsl-opal-login-logged-in.png)
2352
2481
 
2353
- #### Tic Tac Toe
2354
-
2355
- Add the following require statement to `app/assets/javascripts/application.rb`
2356
-
2357
- ```ruby
2358
- require 'glimmer-dsl-opal/samples/elaborate/tic_tac_toe'
2359
- ```
2360
-
2361
- ```ruby
2362
- Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
2363
-
2364
- ![Glimmer DSL for SWT Tic Tac Toe](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-tic-tac-toe.png)
2365
- ![Glimmer DSL for SWT Tic Tac Toe In Progress](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-tic-tac-toe-in-progress.png)
2366
- ![Glimmer DSL for SWT Tic Tac Toe Game Over](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-tic-tac-toe-game-over.png)
2367
-
2368
- Glimmer app on the web (using `glimmer-dsl-opal` gem):
2369
-
2370
- Start the Rails server:
2371
- ```
2372
- rails s
2373
- ```
2374
-
2375
- Visit `http://localhost:3000`
2376
-
2377
- You should see "Tic Tac Toe"
2378
-
2379
- ![Glimmer DSL for Opal Tic Tac Toe](images/glimmer-dsl-opal-tic-tac-toe.png)
2380
- ![Glimmer DSL for Opal Tic Tac Toe In Progress](images/glimmer-dsl-opal-tic-tac-toe-in-progress.png)
2381
- ![Glimmer DSL for Opal Tic Tac Toe Game Over](images/glimmer-dsl-opal-tic-tac-toe-game-over.png)
2382
-
2383
2482
  #### Contact Manager
2384
2483
 
2385
2484
  Add the following require statement to `app/assets/javascripts/application.rb`
@@ -2419,7 +2518,7 @@ rails s
2419
2518
 
2420
2519
  Visit `http://localhost:3000`
2421
2520
 
2422
- You should see "Tic Tac Toe"
2521
+ You should see "Contact Manager"
2423
2522
 
2424
2523
  Glimmer DSL for Opal Contact Manager
2425
2524
 
@@ -2441,6 +2540,62 @@ Glimmer DSL for Opal Contact Manager Edit Done
2441
2540
 
2442
2541
  ![Glimmer DSL for Opal Contact Manager Edit Done](images/glimmer-dsl-opal-contact-manager-edit-done.png)
2443
2542
 
2543
+ #### Tic Tac Toe
2544
+
2545
+ Add the following require statement to `app/assets/javascripts/application.rb`
2546
+
2547
+ ```ruby
2548
+ require 'glimmer-dsl-opal/samples/elaborate/tic_tac_toe'
2549
+ ```
2550
+
2551
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
2552
+
2553
+ ![Glimmer DSL for SWT Tic Tac Toe](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-tic-tac-toe.png)
2554
+ ![Glimmer DSL for SWT Tic Tac Toe In Progress](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-tic-tac-toe-in-progress.png)
2555
+ ![Glimmer DSL for SWT Tic Tac Toe Game Over](https://github.com/AndyObtiva/glimmer-dsl-swt/raw/master/images/glimmer-tic-tac-toe-game-over.png)
2556
+
2557
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
2558
+
2559
+ Start the Rails server:
2560
+ ```
2561
+ rails s
2562
+ ```
2563
+
2564
+ Visit `http://localhost:3000`
2565
+
2566
+ You should see "Tic Tac Toe"
2567
+
2568
+ ![Glimmer DSL for Opal Tic Tac Toe](images/glimmer-dsl-opal-tic-tac-toe.png)
2569
+ ![Glimmer DSL for Opal Tic Tac Toe In Progress](images/glimmer-dsl-opal-tic-tac-toe-in-progress.png)
2570
+ ![Glimmer DSL for Opal Tic Tac Toe Game Over](images/glimmer-dsl-opal-tic-tac-toe-game-over.png)
2571
+
2572
+ #### User Profile
2573
+
2574
+ Code: [lib/glimmer-dsl-opal/samples/elaborate/user_profile](lib/glimmer-dsl-opal/samples/elaborate/user_profile.rb)
2575
+
2576
+ Add the following require statement to `app/assets/javascripts/application.rb`
2577
+
2578
+ ```ruby
2579
+ require 'glimmer-dsl-opal/samples/elaborate/user_profile'
2580
+ ```
2581
+
2582
+ Glimmer app on the desktop (using [`glimmer-dsl-swt`](https://github.com/AndyObtiva/glimmer-dsl-swt) gem):
2583
+
2584
+ ![User Profile](https://github.com/AMaleh/glimmer-dsl-swt/raw/master/images/glimmer-user-profile.png)
2585
+
2586
+ Glimmer app on the web (using `glimmer-dsl-opal` gem):
2587
+
2588
+ Start the Rails server:
2589
+ ```
2590
+ rails s
2591
+ ```
2592
+
2593
+ Visit `http://localhost:3000`
2594
+
2595
+ You should see "User Profile"
2596
+
2597
+ ![Opal User Profile](/images/glimmer-dsl-opal-user-profile.png)
2598
+
2444
2599
  #### Weather
2445
2600
 
2446
2601
  Code: [lib/glimmer-dsl-opal/samples/elaborate/weather](lib/glimmer-dsl-opal/samples/elaborate/weather.rb)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.20.1
1
+ 0.23.0
@@ -0,0 +1,78 @@
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
+ include Glimmer
23
+
24
+ # A version of this was featured in a dzone article as an intro to Glimmer syntax:
25
+ # https://dzone.com/articles/an-introduction-glimmer
26
+ shell { |shell_proxy|
27
+ text "User Profile"
28
+
29
+ composite {
30
+ grid_layout 2, false
31
+
32
+ group {
33
+ text "Name"
34
+ grid_layout 2, false
35
+ layout_data :fill, :fill, true, true
36
+ label {text "First"}; text {text "Bullet"}
37
+ label {text "Last"}; text {text "Tooth"}
38
+ }
39
+
40
+ group {
41
+ layout_data :fill, :fill, true, true
42
+ text "Gender"
43
+ radio {text "Male"; selection true}
44
+ radio {text "Female"}
45
+ }
46
+
47
+ group {
48
+ layout_data :fill, :fill, true, true
49
+ text "Role"
50
+ check {text "Student"; selection true}
51
+ check {text "Employee"; selection true}
52
+ }
53
+
54
+ group {
55
+ text "Experience"
56
+ row_layout
57
+ layout_data :fill, :fill, true, true
58
+ spinner {selection 5}; label {text "years"}
59
+ }
60
+
61
+ button {
62
+ text "save"
63
+ layout_data :right, :center, true, true
64
+ on_widget_selected {
65
+ message_box {
66
+ text 'Profile Saved!'
67
+ message 'User profile has been saved!'
68
+ }.open
69
+ }
70
+ }
71
+
72
+ button {
73
+ text "close"
74
+ layout_data :left, :center, true, true
75
+ on_widget_selected { shell_proxy.close }
76
+ }
77
+ }
78
+ }.open
@@ -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 HelloCursor
23
+ include Glimmer::UI::CustomShell
24
+
25
+ attr_accessor :selected_cursor
26
+
27
+ # This method matches the name of the :selected_cursor property by convention
28
+ def selected_cursor_options
29
+ Glimmer::SWT::SWTProxy.cursor_options
30
+ end
31
+
32
+ after_body do
33
+ observe(self, :selected_cursor) {
34
+ body_root.cursor = selected_cursor
35
+ }
36
+ end
37
+
38
+ body {
39
+ shell {
40
+ grid_layout
41
+
42
+ text 'Hello, Cursor!'
43
+ cursor :wait
44
+
45
+ label {
46
+ text 'Please select a cursor style and see it change the mouse cursor (varies per platform):'
47
+ font style: :bold
48
+ cursor :no
49
+ }
50
+ radio_group {
51
+ grid_layout 5, true
52
+ selection <=> [self, :selected_cursor]
53
+ }
54
+ }
55
+ }
56
+ end
57
+
58
+ HelloCursor.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,55 @@
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 HelloScale
23
+ include Glimmer::UI::CustomShell
24
+
25
+ attr_accessor :value
26
+
27
+ before_body do
28
+ @value = 50
29
+ end
30
+
31
+ body {
32
+ shell {
33
+ row_layout(:vertical) {
34
+ fill true
35
+ center true
36
+ }
37
+
38
+ text 'Hello, Scale!'
39
+
40
+ label(:center) {
41
+ text <= [self, :value]
42
+ }
43
+
44
+ scale { # optionally takes :vertical or :horizontal (default) SWT style
45
+ minimum 0
46
+ maximum 100
47
+ selection <=> [self, :value]
48
+ }
49
+
50
+ }
51
+
52
+ }
53
+ end
54
+
55
+ HelloScale.launch
@@ -0,0 +1,56 @@
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 HelloSlider
23
+ include Glimmer::UI::CustomShell
24
+
25
+ attr_accessor :value
26
+
27
+ before_body do
28
+ @value = 50
29
+ end
30
+
31
+ body {
32
+ shell {
33
+ row_layout(:vertical) {
34
+ fill true
35
+ center true
36
+ }
37
+
38
+ text 'Hello, Slider!'
39
+
40
+ label(:center) {
41
+ text <= [self, :value]
42
+ }
43
+
44
+ slider { # optionally takes :vertical or :horizontal (default) SWT style
45
+ minimum 0
46
+ maximum 110 # leave room for 10 extra (slider stops at 100)
47
+ page_increment 10 # page increment occurs when clicking area between slider and beginning or end
48
+ selection <=> [self, :value]
49
+ }
50
+
51
+ }
52
+
53
+ }
54
+ end
55
+
56
+ HelloSlider.launch
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2021 Andy Maleh
1
+ # Copyright (c) 2020-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -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,98 @@
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 ScaleProxy < WidgetProxy
27
+ attr_reader :selection, :minimum, :maximum, :increment
28
+
29
+ def initialize(parent, args, block)
30
+ super(parent, args, block)
31
+ dom_element.slider
32
+ end
33
+
34
+ def selection=(value)
35
+ old_value = @selection.to_f
36
+ @selection = value.to_f
37
+ dom_element.slider('option', 'value', @selection)
38
+ end
39
+ alias set_selection selection=
40
+
41
+ def minimum=(value)
42
+ @minimum = value.to_f
43
+ dom_element.slider('option', 'min', @minimum)
44
+ end
45
+
46
+ def maximum=(value)
47
+ @maximum = value.to_f
48
+ dom_element.slider('option', 'max', @maximum)
49
+ end
50
+
51
+ def increment=(value)
52
+ @increment = value.to_f
53
+ dom_element.slider('option', 'step', @increment)
54
+ end
55
+
56
+ def element
57
+ 'div'
58
+ end
59
+
60
+ def observation_request_to_event_mapping
61
+ {
62
+ 'on_widget_selected' => [
63
+ {
64
+ event: 'change',
65
+ event_handler: -> (event_listener) {
66
+ -> (event) {
67
+ self.selection = dom_element.slider('option', 'value')
68
+ event_listener.call(event)
69
+ }
70
+ }
71
+ },
72
+ {
73
+ event: 'slidestop',
74
+ event_handler: -> (event_listener) {
75
+ -> (event) {
76
+ self.selection = dom_element.slider('option', 'value')
77
+ event_listener.call(event)
78
+ }
79
+ }
80
+ },
81
+ ],
82
+ }
83
+ end
84
+
85
+ def dom
86
+ scale_selection = @selection
87
+ scale_id = id
88
+ scale_style = css
89
+ scale_class = name
90
+ options = {type: 'text', id: scale_id, style: scale_style, class: scale_class, value: scale_selection}
91
+ options = options.merge('disabled': 'disabled') unless @enabled
92
+ @dom ||= html {
93
+ div(options)
94
+ }.to_s
95
+ end
96
+ end
97
+ end
98
+ end
@@ -37,6 +37,9 @@ module Glimmer
37
37
  height: 100%;
38
38
  margin: 0;
39
39
  }
40
+ * {
41
+ cursor: inherit;
42
+ }
40
43
  .shell {
41
44
  height: 100%;
42
45
  margin: 0;
@@ -0,0 +1,100 @@
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 SliderProxy < WidgetProxy
27
+ attr_reader :selection, :minimum, :maximum, :page_increment
28
+
29
+ def initialize(parent, args, block)
30
+ super(parent, args, block)
31
+ dom_element.slider
32
+ self.page_increment = 10 # default page increment
33
+ end
34
+
35
+ def selection=(value)
36
+ old_value = @selection.to_f
37
+ @selection = value.to_f
38
+ dom_element.slider('option', 'value', @selection)
39
+ end
40
+ alias set_selection selection=
41
+
42
+ def minimum=(value)
43
+ @minimum = value.to_f
44
+ dom_element.slider('option', 'min', @minimum)
45
+ end
46
+
47
+ def maximum=(value)
48
+ # being compatible with slider quirk in Glimmer DSL for SWT (does not reach max yet max - 10)
49
+ @maximum = value.to_f - 10
50
+ dom_element.slider('option', 'max', @maximum)
51
+ end
52
+
53
+ def page_increment=(value)
54
+ @page_increment = value.to_f
55
+ dom_element.slider('option', 'step', @page_increment)
56
+ end
57
+
58
+ def element
59
+ 'div'
60
+ end
61
+
62
+ def observation_request_to_event_mapping
63
+ {
64
+ 'on_widget_selected' => [
65
+ {
66
+ event: 'change',
67
+ event_handler: -> (event_listener) {
68
+ -> (event) {
69
+ self.selection = dom_element.slider('option', 'value')
70
+ event_listener.call(event)
71
+ }
72
+ }
73
+ },
74
+ {
75
+ event: 'slidestop',
76
+ event_handler: -> (event_listener) {
77
+ -> (event) {
78
+ self.selection = dom_element.slider('option', 'value')
79
+ event_listener.call(event)
80
+ }
81
+ }
82
+ },
83
+ ],
84
+ }
85
+ end
86
+
87
+ def dom
88
+ slider_selection = @selection
89
+ slider_id = id
90
+ slider_style = css
91
+ slider_class = name
92
+ options = {type: 'text', id: slider_id, style: slider_style, class: slider_class, value: slider_selection}
93
+ options = options.merge('disabled': 'disabled') unless @enabled
94
+ @dom ||= html {
95
+ div(options)
96
+ }.to_s
97
+ end
98
+ end
99
+ end
100
+ end
@@ -1,3 +1,24 @@
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
+
1
22
  require 'glimmer/swt/widget_proxy'
2
23
 
3
24
  module Glimmer
@@ -179,10 +200,8 @@ module Glimmer
179
200
  text_id = id
180
201
  text_style = css
181
202
  text_class = name
182
- # TODO support password field
183
203
  options = {type: 'text', id: text_id, style: text_style, class: text_class, value: text_text, style: 'min-width: 27px;'}
184
204
  options = options.merge('disabled': 'disabled') unless @enabled
185
- options = options.merge(type: 'password') if has_style?(:password)
186
205
  @dom ||= html {
187
206
  input(options)
188
207
  }.to_s
@@ -1,5 +1,5 @@
1
1
  # Copyright (c) 2020-2021 Andy Maleh
2
- #
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -27,8 +27,8 @@ module Glimmer
27
27
  # Proxy for org.eclipse.swt.SWT
28
28
  #
29
29
  # Follows the Proxy Design Pattern
30
- class SWTProxy
31
- include StyleConstantizable
30
+ class SWTProxy
31
+ include StyleConstantizable
32
32
 
33
33
  class << self
34
34
  def constant_source_class
@@ -42,12 +42,16 @@ module Glimmer
42
42
  def extra_styles
43
43
  EXTRA_STYLES
44
44
  end
45
+
46
+ def cursor_options
47
+ [:wait, :sizenwse, :appstarting, :no, :sizenesw, :sizeall, :help, :sizee, :sizewe, :sizen, :sizes, :sizew, :cross, :sizese, :ibeam, :arrow, :sizesw, :uparrow, :hand, :sizenw, :sizene, :sizens]
48
+ end
45
49
  end
46
50
 
47
51
  EXTRA_STYLES = {
48
52
  NO_RESIZE: self[:shell_trim, :resize!, :max!],
49
53
  NO_SORT: -7,
50
- }
54
+ }
51
55
  end
52
56
  end
53
57
  end
@@ -81,7 +81,6 @@ module Glimmer
81
81
  text_id = id
82
82
  text_style = css
83
83
  text_class = name
84
- # TODO support password field
85
84
  options = {type: 'text', id: text_id, style: text_style, class: text_class, value: text_text, style: 'min-width: 27px;'}
86
85
  options = options.merge('disabled': 'disabled') unless @enabled
87
86
  options = options.merge(type: 'password') if has_style?(:password)
@@ -31,7 +31,32 @@ module Glimmer
31
31
  include Glimmer
32
32
  include PropertyOwner
33
33
 
34
- attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus, :disposed?, :rendered
34
+ SWT_CURSOR_TO_CSS_CURSOR_MAP = {
35
+ wait: 'wait',
36
+ sizenwse: 'nwse-resize',
37
+ appstarting: 'progress',
38
+ no: 'no-drop',
39
+ sizenesw: 'nesw-resize',
40
+ sizeall: 'all-scroll',
41
+ help: 'help',
42
+ sizee: 'e-resize',
43
+ sizewe: 'ew-resize',
44
+ sizen: 'n-resize',
45
+ sizes: 's-resize',
46
+ sizew: 'w-resize',
47
+ cross: 'crosshair',
48
+ sizese: 'se-resize',
49
+ ibeam: 'text',
50
+ arrow: 'default',
51
+ sizesw: 'sw-resize',
52
+ uparrow: 'alias',
53
+ hand: 'grab',
54
+ sizenw: 'nw-resize',
55
+ sizene: 'ne-resize',
56
+ sizens: 'ns-resize',
57
+ }
58
+
59
+ attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus, :disposed?, :rendered, :cursor
35
60
  attr_accessor :menu, :menu_requested, :menu_x, :menu_y
36
61
  alias isDisposed disposed?
37
62
  alias is_disposed disposed?
@@ -242,6 +267,11 @@ module Glimmer
242
267
  dom_element.css('font-size', "#{@font.height}px") unless @font.nil?
243
268
  end
244
269
 
270
+ def cursor=(value)
271
+ @cursor = value
272
+ dom_element.css('cursor', css_cursor)
273
+ end
274
+
245
275
  def focus=(value)
246
276
  @focus = value
247
277
  dom_element.focus # TODO consider if a delay or async_exec is needed here
@@ -851,6 +881,20 @@ module Glimmer
851
881
  # }
852
882
  # end,
853
883
  # },
884
+ ScaleProxy => {
885
+ :selection => lambda do |observer|
886
+ on_widget_selected { |selection_event|
887
+ observer.call(selection)
888
+ }
889
+ end
890
+ },
891
+ SliderProxy => {
892
+ :selection => lambda do |observer|
893
+ on_widget_selected { |selection_event|
894
+ observer.call(selection)
895
+ }
896
+ end
897
+ },
854
898
  SpinnerProxy => {
855
899
  :selection => lambda do |observer|
856
900
  on_widget_selected { |selection_event|
@@ -950,17 +994,16 @@ module Glimmer
950
994
  # observer.call(getSelection)
951
995
  # }
952
996
  # end
953
- # },
954
- # Java::OrgEclipseSwtWidgets::Spinner => {
955
- # :selection => lambda do |observer|
956
- # on_widget_selected { |selection_event|
957
- # observer.call(getSelection)
958
- # }
959
- # end
960
997
  # },
961
998
  }
962
999
  end
963
1000
 
1001
+ private
1002
+
1003
+ def css_cursor
1004
+ SWT_CURSOR_TO_CSS_CURSOR_MAP[@cursor]
1005
+ end
1006
+
964
1007
  end
965
1008
  end
966
1009
  end
@@ -990,7 +1033,9 @@ require 'glimmer/swt/table_item_proxy'
990
1033
  require 'glimmer/swt/table_proxy'
991
1034
  require 'glimmer/swt/text_proxy'
992
1035
  require 'glimmer/swt/radio_proxy'
1036
+ require 'glimmer/swt/scale_proxy'
993
1037
  require 'glimmer/swt/scrolled_composite_proxy'
1038
+ require 'glimmer/swt/slider_proxy'
994
1039
  require 'glimmer/swt/spinner_proxy'
995
1040
  require 'glimmer/swt/styled_text_proxy'
996
1041
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.1
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
@@ -283,6 +283,7 @@ files:
283
283
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
284
284
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/board.rb
285
285
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/cell.rb
286
+ - lib/glimmer-dsl-opal/samples/elaborate/user_profile.rb
286
287
  - lib/glimmer-dsl-opal/samples/elaborate/weather.rb
287
288
  - lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb
288
289
  - lib/glimmer-dsl-opal/samples/hello/hello_browser.rb
@@ -294,11 +295,13 @@ files:
294
295
  - lib/glimmer-dsl-opal/samples/hello/hello_combo.rb
295
296
  - lib/glimmer-dsl-opal/samples/hello/hello_composite.rb
296
297
  - lib/glimmer-dsl-opal/samples/hello/hello_computed.rb
298
+ - lib/glimmer-dsl-opal/samples/hello/hello_cursor.rb
297
299
  - lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb
298
300
  - lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb
299
301
  - lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb
300
302
  - lib/glimmer-dsl-opal/samples/hello/hello_dialog.rb
301
303
  - lib/glimmer-dsl-opal/samples/hello/hello_group.rb
304
+ - lib/glimmer-dsl-opal/samples/hello/hello_label.rb
302
305
  - lib/glimmer-dsl-opal/samples/hello/hello_layout.rb
303
306
  - lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb
304
307
  - lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb
@@ -307,6 +310,8 @@ files:
307
310
  - lib/glimmer-dsl-opal/samples/hello/hello_pop_up_context_menu.rb
308
311
  - lib/glimmer-dsl-opal/samples/hello/hello_radio.rb
309
312
  - lib/glimmer-dsl-opal/samples/hello/hello_radio_group.rb
313
+ - lib/glimmer-dsl-opal/samples/hello/hello_scale.rb
314
+ - lib/glimmer-dsl-opal/samples/hello/hello_slider.rb
310
315
  - lib/glimmer-dsl-opal/samples/hello/hello_spinner.rb
311
316
  - lib/glimmer-dsl-opal/samples/hello/hello_tab.rb
312
317
  - lib/glimmer-dsl-opal/samples/hello/hello_table.rb
@@ -419,8 +424,10 @@ files:
419
424
  - lib/glimmer/swt/property_owner.rb
420
425
  - lib/glimmer/swt/radio_proxy.rb
421
426
  - lib/glimmer/swt/row_layout_proxy.rb
427
+ - lib/glimmer/swt/scale_proxy.rb
422
428
  - lib/glimmer/swt/scrolled_composite_proxy.rb
423
429
  - lib/glimmer/swt/shell_proxy.rb
430
+ - lib/glimmer/swt/slider_proxy.rb
424
431
  - lib/glimmer/swt/spinner_proxy.rb
425
432
  - lib/glimmer/swt/style_constantizable.rb
426
433
  - lib/glimmer/swt/styled_text_proxy.rb