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 +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +189 -34
- data/VERSION +1 -1
- data/lib/glimmer-dsl-opal/samples/elaborate/user_profile.rb +78 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_cursor.rb +58 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_label.rb +192 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_scale.rb +55 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_slider.rb +56 -0
- data/lib/glimmer-dsl-opal/samples/hello/hello_spinner.rb +1 -1
- data/lib/glimmer/swt/c_tab_item_proxy.rb +1 -1
- data/lib/glimmer/swt/label_proxy.rb +19 -20
- data/lib/glimmer/swt/scale_proxy.rb +98 -0
- data/lib/glimmer/swt/shell_proxy.rb +3 -0
- data/lib/glimmer/swt/slider_proxy.rb +100 -0
- data/lib/glimmer/swt/spinner_proxy.rb +21 -2
- data/lib/glimmer/swt/swt_proxy.rb +10 -6
- data/lib/glimmer/swt/text_proxy.rb +0 -1
- data/lib/glimmer/swt/widget_proxy.rb +53 -8
- metadata +8 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97154ebca855643dd407d82d30a6d7e127814fe5365bec2020a9f5ac14a20fbf
|
4
|
+
data.tar.gz: bc7dc89a573bff5406666a6b59ecf8cfc623493f6f680190ce42655236f79dec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
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 "
|
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.
|
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
|
@@ -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[
|
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)
|
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
|
-
|
44
|
-
|
45
|
-
#
|
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:
|
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
|
@@ -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
|
-
|
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.
|
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
|