glimmer-dsl-swt 4.21.2.4 → 4.21.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +11 -8
- data/VERSION +1 -1
- data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +148 -73
- data/docs/reference/GLIMMER_SAMPLES.md +13 -0
- data/glimmer-dsl-swt.gemspec +0 -0
- data/samples/hello/hello_scrolled_composite.rb +95 -0
- data/samples/hello/hello_world.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d379f6055bc86787c888142b3ae76c8cec195e558b00880bdcc2ca5849f0323d
|
4
|
+
data.tar.gz: 1c4c5a96157a4ddf59515a9a3399f505071d3e9caf8e32656fb6238157ed8d78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 076e3436c4b1258a11b291df10196a9ee18e34703b8769de3b3d5d5120ee66927290e15aa874b98850ca7c73c537469130c1a20d2013f21bcff67b076c771e0c
|
7
|
+
data.tar.gz: ab43d3b02470e200dc0b84c2649f96cae1058307b06923d15c63f6a89f69407d4c66371cdce479b19ba9e5d27071a72b78ab516fde4350c0fdf6f953beb7d528
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
### 4.21.2.5
|
4
|
+
|
5
|
+
- Hello, Scrolled Composite! sample
|
6
|
+
|
3
7
|
### 4.21.2.4
|
4
8
|
|
5
9
|
- Update gem `post_install_message` to clearly indicate that `-J-XstartOnFirstThread` jruby option is needed on the Mac and is handled automatically with global configuration after running `glimmer-setup`.
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.21.2.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.21.2.5
|
2
2
|
## JRuby Desktop Development GUI Framework
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
|
4
4
|
[![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
|
@@ -6,8 +6,6 @@
|
|
6
6
|
[![Maintainability](https://api.codeclimate.com/v1/badges/aaf1cba142dd351f84bd/maintainability)](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-swt/maintainability)
|
7
7
|
[![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
8
8
|
|
9
|
-
**[Contributors Wanted! (Submit a Glimmer App Sample to Get Started)](#contributing)**
|
10
|
-
|
11
9
|
**(The Original Glimmer Library Handling the World’s Ruby GUI Needs Since 2007. Beware of Imitators!)**
|
12
10
|
|
13
11
|
[Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [SWT](https://www.eclipse.org/swt/) is a native-GUI cross-platform desktop development library written in [JRuby](https://www.jruby.org/), an OS-threaded faster JVM version of [Ruby](https://www.ruby-lang.org/en/). [Glimmer](https://github.com/AndyObtiva/glimmer)'s main innovation is a declarative [Ruby DSL](docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#glimmer-dsl-syntax) that enables productive and efficient authoring of desktop application user-interfaces by relying on the robust [Eclipse SWT library](https://www.eclipse.org/swt/). [Glimmer](https://rubygems.org/gems/glimmer) additionally innovates by having built-in [data-binding](docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#data-binding) support, which greatly facilitates synchronizing the GUI with domain models, thus achieving true decoupling of object oriented components and enabling developers to solve business problems (test-first) without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models afterwards. Not only does Glimmer provide a large set of GUI [widgets](docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#widgets), but it also supports drawing Canvas Graphics like [Shapes](docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#canvas-shape-dsl) and [Animations](docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#canvas-animation-dsl). To get started quickly, [Glimmer](https://rubygems.org/gems/glimmer) offers [scaffolding](docs/reference/GLIMMER_COMMAND.md#scaffolding) options for [Apps](#in-production), [Gems](docs/reference/GLIMMER_COMMAND.md#custom-shell-gem), and [Custom Widgets](docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#custom-widgets). [Glimmer](https://rubygems.org/gems/glimmer) also includes native-executable [packaging](docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md) support, sorely lacking in other libraries, thus enabling the delivery of desktop apps written in [Ruby](https://www.ruby-lang.org/en/) as truly native DMG/PKG/APP files on the [Mac](https://www.apple.com/ca/macos), MSI/EXE files on [Windows](https://www.microsoft.com/en-ca/windows), and DEB/RPM files on [Linux](https://www.linux.org/). [Glimmer](https://github.com/AndyObtiva/glimmer) was the [first Ruby gem](https://rubygems.org/gems/glimmer) to bring [SWT](https://www.eclipse.org/swt/) (Standard Widget Toolkit) to [Ruby](https://www.ruby-lang.org/en/), thanks to creator [Andy Maleh](https://andymaleh.blogspot.com/), EclipseCon/EclipseWorld/RubyConf speaker.
|
@@ -15,7 +13,11 @@
|
|
15
13
|
[<img src="https://covers.oreillystatic.com/images/9780596519650/lrg.jpg" width=105 /><br />
|
16
14
|
Featured in JRuby Cookbook](http://shop.oreilly.com/product/9780596519650.do) and [Chalmers/Gothenburg University Software Engineering Master's Lecture Material](http://www.cse.chalmers.se/~bergert/slides/guest_lecture_DSLs.pdf)
|
17
15
|
|
18
|
-
[
|
16
|
+
[SWT](https://www.eclipse.org/swt/) (Standard Widget Toolkit) is a very robust GUI toolkit that is most famous for building the [Eclipse IDE](https://www.eclipse.org/ide/), a free and open-source general language Integrated Development Environment that was the first to provide a high-performance pause-free [Java](https://www.oracle.com/ca-en/java/) IDE (unlike earlier versions of NetBeans and other [Java](https://www.oracle.com/ca-en/java/) IDEs), thanks to its very smart software architecture. Additionally, [Eclipse RCP (Rich Client Platform, built on top of SWT) has been used by NASA to build Mars Rover operational software](https://www.eclipse.org/community/casestudies/NASAfinal.pdf). So, [Eclipse technologies](https://www.eclipse.org/) are not only very highly proven, but are also considered some of the best in the world. In fact, it took CSS decades before it finally caught up with one of [SWT](https://www.eclipse.org/swt/)'s very effective ideas, the [GridLayout](https://help.eclipse.org/latest/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/package-summary.html). [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) makes [Eclipse Technologies](https://www.eclipse.org/) available in [Ruby](https://www.ruby-lang.org) via [JRuby](https://www.jruby.org/).
|
17
|
+
|
18
|
+
![Eclipse SWT RCP NASA Mars Rover](/images/glimmer-eclipse-swt-rcp-nasa-mars-rover.png)
|
19
|
+
|
20
|
+
[Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.21.2.5 includes [SWT 4.21](https://download.eclipse.org/eclipse/downloads/drops4/R-4.21-202109060500/), which was released on September 6, 2021. Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT. Note that SWT now supports AARCH64 on Mac and Linux, but it is not fully tested in Glimmer DSL for SWT yet, so deem its support experimental for the time being without guarantees for functionality until declared otherwise (please report any issues you may encounter).
|
19
21
|
|
20
22
|
**Starting in version 4.20.0.0, [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) comes with the new [***Shine***](/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#shine) syntax** for highly intuitive and visually expressive View/Model Attribute Mapping, relying on `<=>` for bidirectional (two-way) data-binding and `<=` for unidirectional (one-way) data-binding, providing an alternative to the `bind` keyword (keep in mind that it is still a beta, so default back to `bind` whenever needed).
|
21
23
|
|
@@ -40,6 +42,7 @@ include Glimmer
|
|
40
42
|
|
41
43
|
shell {
|
42
44
|
text "Glimmer"
|
45
|
+
|
43
46
|
label {
|
44
47
|
text "Hello, World!"
|
45
48
|
}
|
@@ -231,7 +234,7 @@ Glimmer app:
|
|
231
234
|
|
232
235
|
## Background
|
233
236
|
|
234
|
-
[Ruby](https://www.ruby-lang.org) is a dynamically-typed object-oriented language, which provides great productivity gains due to its powerful expressive syntax and dynamic nature. While it is proven by the [Ruby](https://www.ruby-lang.org) on Rails framework for web development, it currently lacks a robust platform-independent framework for building desktop applications. Given that Java libraries can now be utilized in Ruby code through JRuby, Eclipse technologies, such as [SWT](https://www.eclipse.org/swt/), JFace, and RCP can help fill the gap of desktop application development with Ruby.
|
237
|
+
[Ruby](https://www.ruby-lang.org) is a dynamically-typed object-oriented language, which provides great productivity gains due to its powerful expressive syntax and dynamic nature. While it is proven by the [Ruby](https://www.ruby-lang.org) on Rails framework for web development, it currently lacks a robust platform-independent framework for building desktop applications. Given that [Java](https://www.oracle.com/ca-en/java/) libraries can now be utilized in Ruby code through JRuby, Eclipse technologies, such as [SWT](https://www.eclipse.org/swt/), JFace, and RCP can help fill the gap of desktop application development with Ruby.
|
235
238
|
|
236
239
|
## Software Architecture
|
237
240
|
|
@@ -322,7 +325,7 @@ jgem install glimmer-dsl-swt
|
|
322
325
|
|
323
326
|
Or this command if you want a specific version:
|
324
327
|
```
|
325
|
-
jgem install glimmer-dsl-swt -v 4.21.2.
|
328
|
+
jgem install glimmer-dsl-swt -v 4.21.2.5
|
326
329
|
```
|
327
330
|
|
328
331
|
`jgem` is JRuby's version of `gem` command.
|
@@ -350,7 +353,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
|
|
350
353
|
|
351
354
|
Add the following to `Gemfile`:
|
352
355
|
```
|
353
|
-
gem 'glimmer-dsl-swt', '~> 4.21.2.
|
356
|
+
gem 'glimmer-dsl-swt', '~> 4.21.2.5'
|
354
357
|
```
|
355
358
|
|
356
359
|
And, then run:
|
@@ -371,7 +374,7 @@ glimmer
|
|
371
374
|
```
|
372
375
|
|
373
376
|
```
|
374
|
-
Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.21.2.
|
377
|
+
Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.21.2.5
|
375
378
|
|
376
379
|
Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
|
377
380
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.21.2.
|
1
|
+
4.21.2.5
|
@@ -111,6 +111,7 @@ include Glimmer
|
|
111
111
|
|
112
112
|
shell {
|
113
113
|
text "Glimmer"
|
114
|
+
|
114
115
|
label {
|
115
116
|
text "Hello, World!"
|
116
117
|
}
|
@@ -131,6 +132,7 @@ class HelloWorld
|
|
131
132
|
# the following are GUI DSL keywords (shell, text, and label) used in the instance scope
|
132
133
|
shell {
|
133
134
|
text "Glimmer"
|
135
|
+
|
134
136
|
label {
|
135
137
|
text "Hello, World!"
|
136
138
|
foreground COLOR_FOREGROUND_DEFAULT
|
@@ -210,6 +212,7 @@ For example, if we were to revisit `samples/hello/hello_world.rb` above (you may
|
|
210
212
|
```ruby
|
211
213
|
shell {
|
212
214
|
text "Glimmer"
|
215
|
+
|
213
216
|
label {
|
214
217
|
text "Hello, World!"
|
215
218
|
}
|
@@ -223,6 +226,7 @@ Note that `shell` instantiates the outer shell **widget**, in other words, the w
|
|
223
226
|
```ruby
|
224
227
|
# ...
|
225
228
|
text "Glimmer" # text property of shell
|
229
|
+
|
226
230
|
label { # label widget declaration as content of shell
|
227
231
|
text "Hello, World!" # text property of label
|
228
232
|
}
|
@@ -268,15 +272,19 @@ Example from [hello_tab.rb](samples/hello/hello_tab.rb) sample (you may copy/pas
|
|
268
272
|
```ruby
|
269
273
|
shell {
|
270
274
|
text "Hello, Tab!"
|
275
|
+
|
271
276
|
tab_folder {
|
272
277
|
tab_item {
|
273
278
|
text "English"
|
279
|
+
|
274
280
|
label {
|
275
281
|
text "Hello, World!"
|
276
282
|
}
|
277
283
|
}
|
284
|
+
|
278
285
|
tab_item {
|
279
286
|
text "French"
|
287
|
+
|
280
288
|
label {
|
281
289
|
text "Bonjour Univers!"
|
282
290
|
}
|
@@ -294,63 +302,63 @@ If you are an advanced user of Glimmer DSL for SWT and need more widgets, check
|
|
294
302
|
This is not an exaustive list, but should give you a good start in learning Glimmer GUI DSL keywords, keeping in mind that the full list can be derived from the [SWT documentation](https://www.eclipse.org/swt/widgets/). More will be explained in the following sections.
|
295
303
|
|
296
304
|
**Widgets:**
|
297
|
-
- `button`: featured in [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Message Box!](GLIMMER_SAMPLES.md#hello-message-box) / [Hello, List Single Selection!](GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Hello, Combo!](GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe) / [Login](GLIMMER_SAMPLES.md#login)
|
298
|
-
- `browser`: featured in [Hello, Browser!](GLIMMER_SAMPLES.md#hello-browser)
|
299
|
-
- `calendar`: featured in [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time)
|
300
|
-
- `checkbox`: featured in [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox)
|
301
|
-
- `checkbox_group`: featured in [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group)
|
302
|
-
- `combo`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Combo!](GLIMMER_SAMPLES.md#hello-combo)
|
303
|
-
- `composite`: featured in [Hello, Composite!](GLIMMER_SAMPLES.md#hello-composite) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe) / [Login](GLIMMER_SAMPLES.md#login) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
304
|
-
- `cool_bar`: featured in [Hello, Cool Bar!](GLIMMER_SAMPLES.md#hello-cool-bar)
|
305
|
-
- `date`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
306
|
-
- `date_drop_down`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time)
|
307
|
-
- `group`: featured in [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
308
|
-
- `label`: featured in [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, World!](GLIMMER_SAMPLES.md#hello-world) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Tab!](GLIMMER_SAMPLES.md#hello-tab) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Login](GLIMMER_SAMPLES.md#login)
|
309
|
-
- `list` (w/ optional `:multi` SWT style): featured in [Hello, List Single Selection!](GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
310
|
-
- `menu`: featured in [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table)
|
311
|
-
- `menu_bar`: featured in [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar)
|
312
|
-
- `menu_item`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar)
|
313
|
-
- `message_box`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Message Box!](GLIMMER_SAMPLES.md#hello-message-box) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar)
|
314
|
-
- `radio`: featured in [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group)
|
315
|
-
- `radio_group`: featured in [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group)
|
305
|
+
- `button`: featured in [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](/docs/reference/GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Message Box!](/docs/reference/GLIMMER_SAMPLES.md#hello-message-box) / [Hello, List Single Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Hello, Combo!](/docs/reference/GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login)
|
306
|
+
- `browser`: featured in [Hello, Browser!](/docs/reference/GLIMMER_SAMPLES.md#hello-browser)
|
307
|
+
- `calendar`: featured in [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time)
|
308
|
+
- `checkbox`: featured in [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox)
|
309
|
+
- `checkbox_group`: featured in [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group)
|
310
|
+
- `combo`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Combo!](/docs/reference/GLIMMER_SAMPLES.md#hello-combo)
|
311
|
+
- `composite`: featured in [Hello, Composite!](/docs/reference/GLIMMER_SAMPLES.md#hello-composite) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
312
|
+
- `cool_bar`: featured in [Hello, Cool Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-cool-bar)
|
313
|
+
- `date`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
314
|
+
- `date_drop_down`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time)
|
315
|
+
- `group`: featured in [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
316
|
+
- `label`: featured in [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, World!](/docs/reference/GLIMMER_SAMPLES.md#hello-world) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Tab!](/docs/reference/GLIMMER_SAMPLES.md#hello-tab) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login)
|
317
|
+
- `list` (w/ optional `:multi` SWT style): featured in [Hello, List Single Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
318
|
+
- `menu`: featured in [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table)
|
319
|
+
- `menu_bar`: featured in [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar)
|
320
|
+
- `menu_item`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar)
|
321
|
+
- `message_box`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Message Box!](/docs/reference/GLIMMER_SAMPLES.md#hello-message-box) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar)
|
322
|
+
- `radio`: featured in [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group)
|
323
|
+
- `radio_group`: featured in [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group)
|
316
324
|
- `scrolled_composite`
|
317
|
-
- `shell`: featured in [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Tab!](GLIMMER_SAMPLES.md#hello-tab) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, List Single Selection!](GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Hello, Combo!](GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe) / [Login](GLIMMER_SAMPLES.md#login)
|
318
|
-
- `tab_folder`: featured in [Hello, Tab!](GLIMMER_SAMPLES.md#hello-tab)
|
319
|
-
- `tab_item`: featured in [Hello, Tab!](GLIMMER_SAMPLES.md#hello-tab)
|
320
|
-
- `table`: featured in [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
321
|
-
- `table_column`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
322
|
-
- `text`: featured in [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Login](GLIMMER_SAMPLES.md#login) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
323
|
-
- `time`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time)
|
325
|
+
- `shell`: featured in [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](/docs/reference/GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Tab!](/docs/reference/GLIMMER_SAMPLES.md#hello-tab) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, List Single Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Hello, Combo!](/docs/reference/GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login)
|
326
|
+
- `tab_folder`: featured in [Hello, Tab!](/docs/reference/GLIMMER_SAMPLES.md#hello-tab)
|
327
|
+
- `tab_item`: featured in [Hello, Tab!](/docs/reference/GLIMMER_SAMPLES.md#hello-tab)
|
328
|
+
- `table`: featured in [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
329
|
+
- `table_column`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
330
|
+
- `text`: featured in [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
331
|
+
- `time`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time)
|
324
332
|
- `tool_bar`: featured in [Hello, Tool Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-tool-bar)
|
325
333
|
- `tool_item`: featured in [Hello, Tool Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-tool-bar)
|
326
|
-
- Glimmer::UI::CustomWidget: ability to define any keyword as a custom widget - featured in [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget)
|
327
|
-
- Glimmer::UI::CustomShell: ability to define any keyword as a custom shell (aka custom window) that opens in a new browser window (tab) automatically unless there is no shell open in the current browser window (tab) - featured in [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell)
|
334
|
+
- Glimmer::UI::CustomWidget: ability to define any keyword as a custom widget - featured in [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget)
|
335
|
+
- Glimmer::UI::CustomShell: ability to define any keyword as a custom shell (aka custom window) that opens in a new browser window (tab) automatically unless there is no shell open in the current browser window (tab) - featured in [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell)
|
328
336
|
|
329
337
|
**Layouts:**
|
330
|
-
- `grid_layout`: featured in [Hello, Layout!](GLIMMER_SAMPLES.md#hello-layout) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, List Single Selection!](GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Login](GLIMMER_SAMPLES.md#login) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
331
|
-
- `row_layout`: featured in [Hello, Layout!](GLIMMER_SAMPLES.md#hello-layout) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Combo!](GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
332
|
-
- `fill_layout`: featured in [Hello, Layout!](GLIMMER_SAMPLES.md#hello-layout) / [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget)
|
333
|
-
- `layout_data`: featured in [Hello, Layout!](GLIMMER_SAMPLES.md#hello-layout) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
338
|
+
- `grid_layout`: featured in [Hello, Layout!](/docs/reference/GLIMMER_SAMPLES.md#hello-layout) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, List Single Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
339
|
+
- `row_layout`: featured in [Hello, Layout!](/docs/reference/GLIMMER_SAMPLES.md#hello-layout) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Combo!](/docs/reference/GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
340
|
+
- `fill_layout`: featured in [Hello, Layout!](/docs/reference/GLIMMER_SAMPLES.md#hello-layout) / [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget)
|
341
|
+
- `layout_data`: featured in [Hello, Layout!](/docs/reference/GLIMMER_SAMPLES.md#hello-layout) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
334
342
|
|
335
343
|
**Graphics/Style:**
|
336
|
-
- `color`: featured in [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar)
|
337
|
-
- `font`: featured in [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
344
|
+
- `color`: featured in [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar)
|
345
|
+
- `font`: featured in [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
338
346
|
- `Point` class used in setting location on widgets
|
339
|
-
- `swt` and `SWT` class to set SWT styles on widgets - featured in [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Login](GLIMMER_SAMPLES.md#login) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
347
|
+
- `swt` and `SWT` class to set SWT styles on widgets - featured in [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
340
348
|
|
341
349
|
**Data-Binding/Observers:**
|
342
|
-
- `bind`: featured in [Hello, Computed!](GLIMMER_SAMPLES.md#hello-computed) / [Hello, Combo!](GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, List Single Selection!](GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Login](GLIMMER_SAMPLES.md#login) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
343
|
-
- `observe`: featured in [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
344
|
-
- `on_widget_selected`: featured in [Hello, Combo!](GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](GLIMMER_SAMPLES.md#hello-radio) / [Hello, Pop Up Context Menu!](GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Message Box!](GLIMMER_SAMPLES.md#hello-message-box) / [Hello, Menu Bar!](GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, List Single Selection!](GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](GLIMMER_SAMPLES.md#hello-group) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) / [Login](GLIMMER_SAMPLES.md#login) / [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
350
|
+
- `bind`: featured in [Hello, Computed!](/docs/reference/GLIMMER_SAMPLES.md#hello-computed) / [Hello, Combo!](/docs/reference/GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](/docs/reference/GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, List Single Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) / [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
351
|
+
- `observe`: featured in [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
352
|
+
- `on_widget_selected`: featured in [Hello, Combo!](/docs/reference/GLIMMER_SAMPLES.md#hello-combo) / [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) / [Hello, Checkbox!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox) / [Hello, Button!](/docs/reference/GLIMMER_SAMPLES.md#hello-button) / [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) / [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) / [Hello, Radio!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio) / [Hello, Pop Up Context Menu!](/docs/reference/GLIMMER_SAMPLES.md#hello-pop-up-context-menu) / [Hello, Message Box!](/docs/reference/GLIMMER_SAMPLES.md#hello-message-box) / [Hello, Menu Bar!](/docs/reference/GLIMMER_SAMPLES.md#hello-menu-bar) / [Hello, List Single Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-single-selection) / [Hello, List Multi Selection!](/docs/reference/GLIMMER_SAMPLES.md#hello-list-multi-selection) / [Hello, Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-group) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) / [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
345
353
|
- `on_modify_text`
|
346
|
-
- `on_key_pressed` (and SWT alias `on_swt_keydown`) - featured in [Login](GLIMMER_SAMPLES.md#login) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
354
|
+
- `on_key_pressed` (and SWT alias `on_swt_keydown`) - featured in [Login](/docs/reference/GLIMMER_SAMPLES.md#login) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
347
355
|
- `on_key_released` (and SWT alias `on_swt_keyup`)
|
348
356
|
- `on_mouse_down` (and SWT alias `on_swt_mousedown`)
|
349
|
-
- `on_mouse_up` (and SWT alias `on_swt_mouseup`) - featured in [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](GLIMMER_SAMPLES.md#contact-manager)
|
357
|
+
- `on_mouse_up` (and SWT alias `on_swt_mouseup`) - featured in [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) / [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager)
|
350
358
|
|
351
359
|
**Event loop:**
|
352
|
-
- `display`: featured in [Tic Tac Toe](GLIMMER_SAMPLES.md#tic-tac-toe)
|
353
|
-
- `async_exec`: featured in [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell)
|
360
|
+
- `display`: featured in [Tic Tac Toe](/docs/reference/GLIMMER_SAMPLES.md#tic-tac-toe)
|
361
|
+
- `async_exec`: featured in [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget) / [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell)
|
354
362
|
- `sync_exec`: executes a block on the event loop synchronously (usually from another thread)
|
355
363
|
- `timer_exec`: executes a block after a delay of time has passed
|
356
364
|
- `auto_exec`: executes a block on the event loop synchronously only when needed (when running from a thread other than GUI thread)
|
@@ -400,12 +408,14 @@ Example (you may copy/paste in [`girb`](GLIMMER_GIRB.md)):
|
|
400
408
|
@shell = shell {
|
401
409
|
text "Application"
|
402
410
|
row_layout
|
411
|
+
|
403
412
|
@label1 = label {
|
404
413
|
text "Hello,"
|
405
414
|
}
|
406
415
|
}
|
407
416
|
@shell.content {
|
408
417
|
minimum_size 130, 130
|
418
|
+
|
409
419
|
label {
|
410
420
|
text "World!"
|
411
421
|
}
|
@@ -448,7 +458,7 @@ Dialog is a variation on Shell. It is basically a shell that is modal (blocks wh
|
|
448
458
|
|
449
459
|
Glimmer facilitates building dialogs by using the `dialog` keyword, which automatically adds the SWT.DIALOG_TRIM and SWT.APPLICATION_MODAL [widget styles](#widget-styles) needed for a dialog.
|
450
460
|
|
451
|
-
Check out [Hello, Dialog!](GLIMMER_SAMPLES.md#hello-dialog) sample to learn more.
|
461
|
+
Check out [Hello, Dialog!](/docs/reference/GLIMMER_SAMPLES.md#hello-dialog) sample to learn more.
|
452
462
|
|
453
463
|
##### message_box
|
454
464
|
|
@@ -461,8 +471,10 @@ include Glimmer
|
|
461
471
|
|
462
472
|
@shell = shell {
|
463
473
|
text 'Hello, Message Box!'
|
474
|
+
|
464
475
|
button {
|
465
476
|
text 'Please Click To Win a Surprise'
|
477
|
+
|
466
478
|
on_widget_selected do
|
467
479
|
message_box(@shell) {
|
468
480
|
text 'Surprise'
|
@@ -502,6 +514,7 @@ automatically uses the `display` created earlier without having to explicitly ho
|
|
502
514
|
```ruby
|
503
515
|
@display = display {
|
504
516
|
cursor_location 300, 300
|
517
|
+
|
505
518
|
on_swt_keydown do
|
506
519
|
# ...
|
507
520
|
end
|
@@ -519,7 +532,7 @@ Although SWT Display is not technically a widget, it has similar APIs and DSL su
|
|
519
532
|
|
520
533
|
Most of the time, you simply get away with Ruby [Threads](https://ruby-doc.org/core-2.5.7/Thread.html) and [Mutexes](https://ruby-doc.org/core-2.5.7/Mutex.html).
|
521
534
|
|
522
|
-
Otherwise, if you need more advanced concurrency, Glimmer includes the [concurrent-ruby gem](https://rubygems.org/gems/concurrent-ruby), which supports many helpful concurrency techniques such as [Thread Pools](http://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html) (used in the [Mandelbrot Fractal](GLIMMER_SAMPLES.md#mandelbrot-fractal) sample).
|
535
|
+
Otherwise, if you need more advanced concurrency, Glimmer includes the [concurrent-ruby gem](https://rubygems.org/gems/concurrent-ruby), which supports many helpful concurrency techniques such as [Thread Pools](http://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html) (used in the [Mandelbrot Fractal](/docs/reference/GLIMMER_SAMPLES.md#mandelbrot-fractal) sample).
|
523
536
|
|
524
537
|
One thing Glimmer DSL for SWT innovates over plain old SWT is not requiring developers to explicitly use `Display.syncExec` from threads other than the GUI threads.
|
525
538
|
Glimmer automatically detects if you're running in a different thread and uses `Display.syncExec` automatically using its own enhanced `auto_exec`
|
@@ -535,21 +548,22 @@ Example (you may copy/paste in [`girb`](GLIMMER_GIRB.md)):
|
|
535
548
|
```
|
536
549
|
@shell = shell {
|
537
550
|
text 'Glimmer'
|
551
|
+
|
538
552
|
@label = label {
|
539
553
|
text 'Hello, World!'
|
540
554
|
}
|
541
555
|
}
|
542
556
|
|
543
|
-
Thread.new
|
544
|
-
[:red, :dark_green, :blue].cycle
|
545
|
-
async_exec
|
557
|
+
Thread.new do
|
558
|
+
[:red, :dark_green, :blue].cycle do |color|
|
559
|
+
async_exec do
|
546
560
|
@label.content {
|
547
561
|
foreground color if @shell.visible?
|
548
562
|
}
|
549
|
-
|
563
|
+
end
|
550
564
|
sleep(1)
|
551
|
-
|
552
|
-
|
565
|
+
end
|
566
|
+
end
|
553
567
|
|
554
568
|
@shell.open
|
555
569
|
```
|
@@ -627,8 +641,10 @@ shell {
|
|
627
641
|
}
|
628
642
|
menu {
|
629
643
|
text 'Open &Recent'
|
644
|
+
|
630
645
|
menu_item {
|
631
646
|
text 'File 1'
|
647
|
+
|
632
648
|
on_widget_selected do
|
633
649
|
message_box {
|
634
650
|
text 'File 1'
|
@@ -636,8 +652,10 @@ shell {
|
|
636
652
|
}.open
|
637
653
|
end
|
638
654
|
}
|
655
|
+
|
639
656
|
menu_item {
|
640
657
|
text 'File 2'
|
658
|
+
|
641
659
|
on_widget_selected do
|
642
660
|
message_box {
|
643
661
|
text 'File 2'
|
@@ -646,7 +664,9 @@ shell {
|
|
646
664
|
end
|
647
665
|
}
|
648
666
|
}
|
667
|
+
|
649
668
|
menu_item(:separator)
|
669
|
+
|
650
670
|
menu_item {
|
651
671
|
text 'E&xit'
|
652
672
|
|
@@ -657,19 +677,23 @@ shell {
|
|
657
677
|
}
|
658
678
|
menu {
|
659
679
|
text '&Edit'
|
680
|
+
|
660
681
|
menu_item {
|
661
682
|
text 'Cut'
|
662
683
|
accelerator :command, :X
|
663
684
|
}
|
685
|
+
|
664
686
|
menu_item {
|
665
687
|
text 'Copy'
|
666
688
|
accelerator :command, :C
|
667
689
|
}
|
690
|
+
|
668
691
|
menu_item {
|
669
692
|
text 'Paste'
|
670
693
|
accelerator :command, :V
|
671
694
|
}
|
672
695
|
}
|
696
|
+
|
673
697
|
menu {
|
674
698
|
text '&Options'
|
675
699
|
|
@@ -681,6 +705,7 @@ shell {
|
|
681
705
|
@select_multiple_menu.enabled = true
|
682
706
|
end
|
683
707
|
}
|
708
|
+
|
684
709
|
@select_one_menu = menu {
|
685
710
|
text '&Select One'
|
686
711
|
enabled false
|
@@ -688,13 +713,16 @@ shell {
|
|
688
713
|
menu_item(:radio) {
|
689
714
|
text 'Option 1'
|
690
715
|
}
|
716
|
+
|
691
717
|
menu_item(:radio) {
|
692
718
|
text 'Option 2'
|
693
719
|
}
|
720
|
+
|
694
721
|
menu_item(:radio) {
|
695
722
|
text 'Option 3'
|
696
723
|
}
|
697
724
|
}
|
725
|
+
|
698
726
|
@select_multiple_menu = menu {
|
699
727
|
text '&Select Multiple'
|
700
728
|
enabled false
|
@@ -702,18 +730,23 @@ shell {
|
|
702
730
|
menu_item(:check) {
|
703
731
|
text 'Option 4'
|
704
732
|
}
|
733
|
+
|
705
734
|
menu_item(:check) {
|
706
735
|
text 'Option 5'
|
707
736
|
}
|
737
|
+
|
708
738
|
menu_item(:check) {
|
709
739
|
text 'Option 6'
|
710
740
|
}
|
711
741
|
}
|
712
742
|
}
|
743
|
+
|
713
744
|
menu {
|
714
745
|
text '&Format'
|
746
|
+
|
715
747
|
menu {
|
716
748
|
text '&Background Color'
|
749
|
+
|
717
750
|
COLORS.each { |color_style|
|
718
751
|
menu_item(:radio) {
|
719
752
|
text color_style.to_s.split('_').map(&:capitalize).join(' ')
|
@@ -724,8 +757,10 @@ shell {
|
|
724
757
|
}
|
725
758
|
}
|
726
759
|
}
|
760
|
+
|
727
761
|
menu {
|
728
762
|
text 'Foreground &Color'
|
763
|
+
|
729
764
|
COLORS.each { |color_style|
|
730
765
|
menu_item(:radio) {
|
731
766
|
text color_style.to_s.split('_').map(&:capitalize).join(' ')
|
@@ -737,8 +772,10 @@ shell {
|
|
737
772
|
}
|
738
773
|
}
|
739
774
|
}
|
775
|
+
|
740
776
|
menu {
|
741
777
|
text '&View'
|
778
|
+
|
742
779
|
menu_item(:radio) {
|
743
780
|
text 'Small'
|
744
781
|
|
@@ -747,6 +784,7 @@ shell {
|
|
747
784
|
@label.parent.pack
|
748
785
|
end
|
749
786
|
}
|
787
|
+
|
750
788
|
menu_item(:radio) {
|
751
789
|
text 'Medium'
|
752
790
|
selection true
|
@@ -756,6 +794,7 @@ shell {
|
|
756
794
|
@label.parent.pack
|
757
795
|
end
|
758
796
|
}
|
797
|
+
|
759
798
|
menu_item(:radio) {
|
760
799
|
text 'Large'
|
761
800
|
|
@@ -765,8 +804,10 @@ shell {
|
|
765
804
|
end
|
766
805
|
}
|
767
806
|
}
|
807
|
+
|
768
808
|
menu {
|
769
809
|
text '&Help'
|
810
|
+
|
770
811
|
menu_item {
|
771
812
|
text '&Manual'
|
772
813
|
accelerator :command, :shift, :M
|
@@ -778,6 +819,7 @@ shell {
|
|
778
819
|
}.open
|
779
820
|
end
|
780
821
|
}
|
822
|
+
|
781
823
|
menu_item {
|
782
824
|
text '&Tutorial'
|
783
825
|
accelerator :command, :shift, :T
|
@@ -789,7 +831,9 @@ shell {
|
|
789
831
|
}.open
|
790
832
|
end
|
791
833
|
}
|
834
|
+
|
792
835
|
menu_item(:separator)
|
836
|
+
|
793
837
|
menu_item {
|
794
838
|
text '&Report an Issue...'
|
795
839
|
|
@@ -825,10 +869,13 @@ shell {
|
|
825
869
|
menu {
|
826
870
|
menu {
|
827
871
|
text '&History'
|
872
|
+
|
828
873
|
menu {
|
829
874
|
text '&Recent'
|
875
|
+
|
830
876
|
menu_item {
|
831
877
|
text 'File 1'
|
878
|
+
|
832
879
|
on_widget_selected do
|
833
880
|
message_box {
|
834
881
|
text 'File 1'
|
@@ -836,8 +883,10 @@ shell {
|
|
836
883
|
}.open
|
837
884
|
end
|
838
885
|
}
|
886
|
+
|
839
887
|
menu_item {
|
840
888
|
text 'File 2'
|
889
|
+
|
841
890
|
on_widget_selected do
|
842
891
|
message_box {
|
843
892
|
text 'File 2'
|
@@ -846,10 +895,13 @@ shell {
|
|
846
895
|
end
|
847
896
|
}
|
848
897
|
}
|
898
|
+
|
849
899
|
menu {
|
850
900
|
text '&Archived'
|
901
|
+
|
851
902
|
menu_item {
|
852
903
|
text 'File 3'
|
904
|
+
|
853
905
|
on_widget_selected do
|
854
906
|
message_box {
|
855
907
|
text 'File 3'
|
@@ -857,8 +909,10 @@ shell {
|
|
857
909
|
}.open
|
858
910
|
end
|
859
911
|
}
|
912
|
+
|
860
913
|
menu_item {
|
861
914
|
text 'File 4'
|
915
|
+
|
862
916
|
on_widget_selected do
|
863
917
|
message_box {
|
864
918
|
text 'File 4'
|
@@ -1006,7 +1060,7 @@ shell {
|
|
1006
1060
|
}.open
|
1007
1061
|
```
|
1008
1062
|
|
1009
|
-
You may check out a more full-fledged example in [Hello, Sash Form!](GLIMMER_SAMPLES.md#hello-sash-form)
|
1063
|
+
You may check out a more full-fledged example in [Hello, Sash Form!](/docs/reference/GLIMMER_SAMPLES.md#hello-sash-form)
|
1010
1064
|
|
1011
1065
|
![Hello Sash Form](/images/glimmer-hello-sash-form.png)
|
1012
1066
|
|
@@ -1321,12 +1375,16 @@ This sets the shell `cursor` to that of `SWT::CURSOR_APPSTARTING`
|
|
1321
1375
|
|
1322
1376
|
### Layouts
|
1323
1377
|
|
1324
|
-
Glimmer lays widgets out visually using SWT layouts, which can only be set on composite widget and subclasses.
|
1378
|
+
Glimmer lays widgets out visually using SWT layouts, configurable with many options (e.g. whether widgets are responsive to window sizing), which can only be set on composite widget and subclasses.
|
1325
1379
|
|
1326
1380
|
The most common SWT layouts are:
|
1327
|
-
- `FillLayout
|
1328
|
-
- `RowLayout
|
1329
|
-
- `GridLayout
|
1381
|
+
- [`fill_layout`](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/FillLayout.html): lays widgets out in equal proportion horizontally or vertically with spacing/margin options. This is the ***default*** layout for ***shell*** (with `:horizontal` option) in Glimmer.
|
1382
|
+
- [`row_layout`](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/RowLayout.html): lays widgets out horizontally or vertically in varying proportions with advanced spacing/margin/justify options
|
1383
|
+
- [`grid_layout`](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/GridLayout.html): lays widgets out in a grid with advanced spacing/margin/alignment/indentation options. This is the **default** layout for **composite** in Glimmer. It is important to master.
|
1384
|
+
|
1385
|
+
Note that if you need to have widgets fill a `row_layout` and resize automatically upon window resize, you must nest `fill true` within. This is the automatic behavior of `fill_layout`. For `grid_layout`, you would have to add `layout_data :fill, :center, true, false` to a child that you want to fill all available space horizontally (whether initially or after window resize) and `layout_data :fill, :fill, true, true` if you want to fill all available space horizontally and vertically.
|
1386
|
+
|
1387
|
+
Do not be alarmed if widget sizes were kept fixed on resize of a window or change of text data. This is normal behavior that can always be overridden with options, such as `fill true` mentioned above. You need to [learn more about each layout](https://help.eclipse.org/latest/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/package-summary.html) before you have mastered them enough for your needs. [Samples](/docs/reference/GLIMMER_SAMPLES.md) like [Hello, Layout!](/docs/reference/GLIMMER_SAMPLES.md#hello-layout) are greatly helpful in learning too.
|
1330
1388
|
|
1331
1389
|
In Glimmer DSL, just like widgets, layouts can be specified with lowercase underscored names followed by a block containing properties, also lowercase underscored names (e.g. `RowLayout` is `row_layout`).
|
1332
1390
|
|
@@ -1483,6 +1541,23 @@ composite {
|
|
1483
1541
|
# ...
|
1484
1542
|
```
|
1485
1543
|
|
1544
|
+
```ruby
|
1545
|
+
# ...
|
1546
|
+
composite {
|
1547
|
+
grid_layout 3, false # grid layout with 3 columns not of equal width
|
1548
|
+
label {
|
1549
|
+
# layout data with explicit setting of properties instead of relying on arguments
|
1550
|
+
layout_data {
|
1551
|
+
horizontal_alignment :fill # could be :beginning, :center or :end too
|
1552
|
+
vertical_alignment :center # could be :beginning, :fill, or :end too
|
1553
|
+
grab_excess_horizontal_space true
|
1554
|
+
grab_excess_vertical_space false
|
1555
|
+
}
|
1556
|
+
}
|
1557
|
+
}
|
1558
|
+
# ...
|
1559
|
+
```
|
1560
|
+
|
1486
1561
|
```ruby
|
1487
1562
|
# ...
|
1488
1563
|
composite {
|
@@ -1708,7 +1783,7 @@ shell {
|
|
1708
1783
|
}.open
|
1709
1784
|
```
|
1710
1785
|
|
1711
|
-
Learn more at the [Hello, Canvas! Sample](GLIMMER_SAMPLES.md#hello-canvas).
|
1786
|
+
Learn more at the [Hello, Canvas! Sample](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas).
|
1712
1787
|
|
1713
1788
|
If you ever have special needs or optimizations, you could always default to direct SWT painting via [org.eclipse.swt.graphics.GC](https://help.eclipse.org/2020-12/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/graphics/GC.html) instead. Learn more at the [SWT Graphics Guide](https://www.eclipse.org/articles/Article-SWT-graphics/SWT_graphics.html) and [SWT Image Guide](https://www.eclipse.org/articles/Article-SWT-images/graphics-resources.html#Saving%20Images).
|
1714
1789
|
|
@@ -1767,7 +1842,7 @@ If you specify the `width` and `height` parameters as `:max`, they get calculate
|
|
1767
1842
|
|
1768
1843
|
Note that you could shift a shape off its centered position within its parent shape by setting `x` to `[:default, x_delta]` and `y` to `[:default, y_delta]`
|
1769
1844
|
|
1770
|
-
Check [Hello, Canvas!](GLIMMER_SAMPLES.md#hello-canvas) for an example that nests lines, points, a polyline, and an image within a drawn rectangle parent:
|
1845
|
+
Check [Hello, Canvas!](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas) for an example that nests lines, points, a polyline, and an image within a drawn rectangle parent:
|
1771
1846
|
|
1772
1847
|
```ruby
|
1773
1848
|
rectangle(205, 50, 88, 96) {
|
@@ -1789,7 +1864,7 @@ Check [Hello, Canvas!](GLIMMER_SAMPLES.md#hello-canvas) for an example that nest
|
|
1789
1864
|
|
1790
1865
|
#### Shapes inside a Widget
|
1791
1866
|
|
1792
|
-
Keep in mind that the Shape DSL can be used inside any widget, not just `canvas`. Unlike shapes on a `canvas`, which are standalone graphics, when included in a widget, which already has its own look and feel, shapes are used as a decorative add-on that complements its look by getting painted on top of it. For example, shapes were used to decorate `composite` blocks in the [Tetris](GLIMMER_SAMPLES.md#tetris) sample to have a more bevel look. In summary, Shapes can be used in a hybrid approach (shapes inside a widget), not just standalone in a `canvas`.
|
1867
|
+
Keep in mind that the Shape DSL can be used inside any widget, not just `canvas`. Unlike shapes on a `canvas`, which are standalone graphics, when included in a widget, which already has its own look and feel, shapes are used as a decorative add-on that complements its look by getting painted on top of it. For example, shapes were used to decorate `composite` blocks in the [Tetris](/docs/reference/GLIMMER_SAMPLES.md#tetris) sample to have a more bevel look. In summary, Shapes can be used in a hybrid approach (shapes inside a widget), not just standalone in a `canvas`.
|
1793
1868
|
|
1794
1869
|
#### Shapes inside an Image
|
1795
1870
|
|
@@ -1939,7 +2014,7 @@ They are implemented with the help of the highly robust Java built-in shape geom
|
|
1939
2014
|
- `Shape#x_end` : right-most included x coordinate
|
1940
2015
|
- `Shape#y_end` : bottom-most included y coordinate
|
1941
2016
|
|
1942
|
-
Check [Hello, Canvas!](GLIMMER_SAMPLES.md#hello-canvas) for an example.
|
2017
|
+
Check [Hello, Canvas!](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas) for an example.
|
1943
2018
|
|
1944
2019
|
|
1945
2020
|
#### Pixel Graphics
|
@@ -2157,7 +2232,7 @@ shell {
|
|
2157
2232
|
|
2158
2233
|
![Canvas Path Example](/images/glimmer-example-canvas-path.png)
|
2159
2234
|
|
2160
|
-
Learn more at the [Hello, Canvas Path!](GLIMMER_SAMPLES.md#hello-canvas-path) and [Stock Ticker](GLIMMER_SAMPLES.md#stock-ticker) samples.
|
2235
|
+
Learn more at the [Hello, Canvas Path!](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas-path) and [Stock Ticker](/docs/reference/GLIMMER_SAMPLES.md#stock-ticker) samples.
|
2161
2236
|
|
2162
2237
|
![Stock Ticker](/images/glimmer-stock-ticker.gif)
|
2163
2238
|
|
@@ -2252,7 +2327,7 @@ transform(1, 1, 4, 2, 2, 4).
|
|
2252
2327
|
translate(3, 7)
|
2253
2328
|
```
|
2254
2329
|
|
2255
|
-
Learn more at the [Hello, Canvas Transform! Sample](GLIMMER_SAMPLES.md#hello-canvas-transform).
|
2330
|
+
Learn more at the [Hello, Canvas Transform! Sample](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas-transform).
|
2256
2331
|
|
2257
2332
|
### Canvas Animation DSL
|
2258
2333
|
|
@@ -2321,7 +2396,7 @@ API of Animation Object (returned from `animation` keyword):
|
|
2321
2396
|
- `#cycle_limited?` returns true if `cycle_count` is specified
|
2322
2397
|
- `#duration_limited?` returns true if `duration_limit` is specified
|
2323
2398
|
|
2324
|
-
Learn more at the [Hello, Canvas Animation!](GLIMMER_SAMPLES.md#hello-canvas-animation) and [Hello, Canvas Animation Data Binding!](GLIMMER_SAMPLES.md#hello-canvas-animation-data-binding) samples.
|
2399
|
+
Learn more at the [Hello, Canvas Animation!](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas-animation) and [Hello, Canvas Animation Data Binding!](/docs/reference/GLIMMER_SAMPLES.md#hello-canvas-animation-data-binding) samples.
|
2325
2400
|
|
2326
2401
|
If there is anything missing you would like added to the Glimmer Animation DSL that you saw available in the SWT APIs, you may [report an issue](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) or implement yourself and [contribute](#contributing) via a Pull Request.
|
2327
2402
|
|
@@ -2329,7 +2404,7 @@ If there is anything missing you would like added to the Glimmer Animation DSL t
|
|
2329
2404
|
|
2330
2405
|
Animation could be alternatively implemented without the `animation` keyword through a loop that invokes model methods inside `sync_exec {}` (or `async_exec {}`), which indirectly cause updates to the GUI via data-binding.
|
2331
2406
|
|
2332
|
-
The [Glimmer Tetris](GLIMMER_SAMPLES.md#tetris) sample provides a good example of that.
|
2407
|
+
The [Glimmer Tetris](/docs/reference/GLIMMER_SAMPLES.md#tetris) sample provides a good example of that.
|
2333
2408
|
|
2334
2409
|
### Data-Binding
|
2335
2410
|
|
@@ -2714,7 +2789,7 @@ shell {
|
|
2714
2789
|
}
|
2715
2790
|
```
|
2716
2791
|
|
2717
|
-
Check out [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) for an actual example including table editors.
|
2792
|
+
Check out [Hello, Table!](/docs/reference/GLIMMER_SAMPLES.md#hello-table) for an actual example including table editors.
|
2718
2793
|
|
2719
2794
|
[Are We There Yet?](#are-we-there-yet) is an actual production Glimmer application that takes full advantage of table capabilities, storing model data in a database via ActiveRecord. As such, it's an excellent demonstration of how to use Glimmer DSL for SWT with a database.
|
2720
2795
|
|
@@ -2722,7 +2797,7 @@ Check out [Hello, Table!](GLIMMER_SAMPLES.md#hello-table) for an actual example
|
|
2722
2797
|
|
2723
2798
|
Glimmer automatically adds sorting support to the SWT `Table` widget.
|
2724
2799
|
|
2725
|
-
Check out the [Contact Manager](GLIMMER_SAMPLES.md#contact-manager) sample for an example.
|
2800
|
+
Check out the [Contact Manager](/docs/reference/GLIMMER_SAMPLES.md#contact-manager) sample for an example.
|
2726
2801
|
You may click on any column and it will sort by ascending order first and descending if you click again.
|
2727
2802
|
|
2728
2803
|
Glimmer automatic table sorting supports `String`, `Integer`, and `Float` columns out of the box as well as any column data that is comparable.
|
@@ -2821,7 +2896,7 @@ This finds the root node. The array is a Java array. This enables easy passing o
|
|
2821
2896
|
To edit a tree, you must invoke `TreeProxy#edit_selected_tree_item` or `TreeProxy#edit_tree_item`. This automatically leverages the SWT TreeEditor custom class behind the scenes, displaying
|
2822
2897
|
a text widget to the user to change the selected or passed tree item text into something else. It automatically persists the change to `items` data-bound model on ENTER/FOCUS-OUT or cancels on ESC/NO-CHANGE.
|
2823
2898
|
|
2824
|
-
Learn more at the [Hello, Tree!](GLIMMER_SAMPLES.md#hello-tree) and [Gladiator](GLIMMER_SAMPLES.md#gladiator) samples.
|
2899
|
+
Learn more at the [Hello, Tree!](/docs/reference/GLIMMER_SAMPLES.md#hello-tree) and [Gladiator](/docs/reference/GLIMMER_SAMPLES.md#gladiator) samples.
|
2825
2900
|
|
2826
2901
|
#### DateTime
|
2827
2902
|
|
@@ -2844,7 +2919,7 @@ You can data-bind any of these properties:
|
|
2844
2919
|
- `minutes bind(model, :property)`: produces an integer
|
2845
2920
|
- `seconds bind(model, :property)`: produces an integer
|
2846
2921
|
|
2847
|
-
Learn more at the [Hello, Date Time!](GLIMMER_SAMPLES.md#hello-date-time) sample.
|
2922
|
+
Learn more at the [Hello, Date Time!](/docs/reference/GLIMMER_SAMPLES.md#hello-date-time) sample.
|
2848
2923
|
|
2849
2924
|
If you need a better widget with the ability to customize the date format pattern, check out the [Nebula CDateTime Glimmer Custom Widget](https://github.com/AndyObtiva/glimmer-cw-cdatetime-nebula)
|
2850
2925
|
|
@@ -3230,7 +3305,7 @@ The `checkboxes` property returns the list of nested `checkbox` widgets.
|
|
3230
3305
|
|
3231
3306
|
When data-binding `selection`, the model property should have a matching property with `_options` suffix (e.g. `activities_options` for `activities`) to provide an `Array` of `String` objects for `checkbox` buttons.
|
3232
3307
|
|
3233
|
-
You may see an example at the [Hello, Checkbox Group!](GLIMMER_SAMPLES.md#hello-checkbox-group) sample.
|
3308
|
+
You may see an example at the [Hello, Checkbox Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-checkbox-group) sample.
|
3234
3309
|
|
3235
3310
|
![Hello Checkbox Group](/images/glimmer-hello-checkbox-group.png)
|
3236
3311
|
|
@@ -3265,7 +3340,7 @@ radio_group { |radio_group_proxy|
|
|
3265
3340
|
# ...
|
3266
3341
|
```
|
3267
3342
|
|
3268
|
-
You may see another example at the [Hello, Radio Group!](GLIMMER_SAMPLES.md#hello-radio-group) sample.
|
3343
|
+
You may see another example at the [Hello, Radio Group!](/docs/reference/GLIMMER_SAMPLES.md#hello-radio-group) sample.
|
3269
3344
|
|
3270
3345
|
##### Code Text Custom Widget
|
3271
3346
|
|
@@ -3529,7 +3604,7 @@ This adds some default keyboard shortcuts:
|
|
3529
3604
|
|
3530
3605
|
If you prefer it to be vanilla with no default key event listeners, then pass the `default_behavior: false` option.
|
3531
3606
|
|
3532
|
-
Learn more at [Hello, Code Text!](GLIMMER_SAMPLES.md#hello-code-text)
|
3607
|
+
Learn more at [Hello, Code Text!](/docs/reference/GLIMMER_SAMPLES.md#hello-code-text)
|
3533
3608
|
|
3534
3609
|
##### Video Custom Custom Widget
|
3535
3610
|
|
@@ -3544,7 +3619,7 @@ Simply install the [glimmer-cw-video](https://rubygems.org/gems/glimmer-cw-video
|
|
3544
3619
|
This [Eclipse guide](https://www.eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm) for how to write custom SWT widgets is also applicable to Glimmer Custom Widgets written in Ruby. I recommend reading it:
|
3545
3620
|
[https://www.eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm](https://www.eclipse.org/articles/Article-Writing%20Your%20Own%20Widget/Writing%20Your%20Own%20Widget.htm)
|
3546
3621
|
|
3547
|
-
Also, you may check out [Hello, Custom Widget!](GLIMMER_SAMPLES.md#hello-custom-widget) for another example.
|
3622
|
+
Also, you may check out [Hello, Custom Widget!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-widget) for another example.
|
3548
3623
|
|
3549
3624
|
### Custom Shells
|
3550
3625
|
|
@@ -3615,7 +3690,7 @@ shell { |app_shell|
|
|
3615
3690
|
|
3616
3691
|
If you use a Custom Shell as the top-level app shell, you may invoke the class method `.launch` instead to avoid building an app class yourself or including Glimmer into the top-level namespace (e.g. `Tetris.launch` instead of `include Glimmer; tetris.open`)
|
3617
3692
|
|
3618
|
-
You may check out [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) for another example.
|
3693
|
+
You may check out [Hello, Custom Shell!](/docs/reference/GLIMMER_SAMPLES.md#hello-custom-shell) for another example.
|
3619
3694
|
|
3620
3695
|
### Drag and Drop
|
3621
3696
|
|
@@ -3641,7 +3716,7 @@ As a second option, you may customize the data being transferred through drag an
|
|
3641
3716
|
3. On the drop target widget, add `on_drop` [DropTargetListener](https://help.eclipse.org/2020-03/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/dnd/DropTargetListener.html) event handler block at minimum (you may also add `on_drag_enter` [must set [`event.detail`](https://help.eclipse.org/2020-06/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/dnd/DropTargetEvent.html#detail) if added], `on_drag_over`, `on_drag_leave`, `on_drag_operation_changed` and `on_drop_accept` if needed)
|
3642
3717
|
4. Read `event.data` and consume it (e.g. change widget text) inside the `on_drop` event handler block.
|
3643
3718
|
|
3644
|
-
Example (taken from [samples/hello/hello_drag_and_drop.rb](GLIMMER_SAMPLES.md#hello-drag-and-drop) / you may copy/paste in [`girb`](GLIMMER_GIRB.md)):
|
3719
|
+
Example (taken from [samples/hello/hello_drag_and_drop.rb](/docs/reference/GLIMMER_SAMPLES.md#hello-drag-and-drop) / you may copy/paste in [`girb`](GLIMMER_GIRB.md)):
|
3645
3720
|
|
3646
3721
|
```ruby
|
3647
3722
|
class Location
|
@@ -5,6 +5,7 @@
|
|
5
5
|
- [Hello, Label!](#hello-label)
|
6
6
|
- [Hello, Text!](#hello-text)
|
7
7
|
- [Hello, Composite!](#hello-composite)
|
8
|
+
- [Hello, Scrolled Composite!](#hello-scrolled-composite)
|
8
9
|
- [Hello, Layout!](#hello-layout)
|
9
10
|
- [Hello, Shell!](#hello-shell)
|
10
11
|
- [Hello, Tab!](#hello-tab)
|
@@ -178,6 +179,18 @@ Code:
|
|
178
179
|
|
179
180
|
![Hello Composite](/images/glimmer-hello-composite.png)
|
180
181
|
|
182
|
+
#### Hello, Scrolled Composite!
|
183
|
+
|
184
|
+
This sample demonstrates the `scrolled_composite` widget, which is used to add scrollbars around content that exceeds the size of the window.
|
185
|
+
|
186
|
+
Code:
|
187
|
+
|
188
|
+
[samples/hello/hello_scrolled_composite.rb](/samples/hello/hello_scrolled_composite.rb)
|
189
|
+
|
190
|
+
![Hello Scrolled Composite](/images/glimmer-hello-scrolled-composite.png)
|
191
|
+
|
192
|
+
![Hello Scrolled Composite](/images/glimmer-hello-scrolled-composite-scrolled.png)
|
193
|
+
|
181
194
|
#### Hello, Layout!
|
182
195
|
|
183
196
|
This sample demonstrates the standard 3 layouts in SWT (though one can write their own for very advanced applications): `fill_layout`, `row_layout`, and `grid_layout`
|
data/glimmer-dsl-swt.gemspec
CHANGED
Binary file
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# Copyright (c) 2007-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-dsl-swt'
|
23
|
+
|
24
|
+
include Glimmer
|
25
|
+
|
26
|
+
shell {
|
27
|
+
grid_layout {
|
28
|
+
margin_width 0
|
29
|
+
margin_height 0
|
30
|
+
}
|
31
|
+
|
32
|
+
text 'Hello, Scrolled Composite!'
|
33
|
+
maximum_size 400, 400
|
34
|
+
|
35
|
+
composite {
|
36
|
+
layout_data {
|
37
|
+
horizontal_alignment :center
|
38
|
+
}
|
39
|
+
|
40
|
+
row_layout
|
41
|
+
|
42
|
+
button {
|
43
|
+
text '<<'
|
44
|
+
|
45
|
+
on_widget_selected do
|
46
|
+
@scrolled_composite.set_origin(0, @scrolled_composite.origin.y)
|
47
|
+
end
|
48
|
+
}
|
49
|
+
|
50
|
+
button {
|
51
|
+
text '>>'
|
52
|
+
|
53
|
+
on_widget_selected do
|
54
|
+
@scrolled_composite.set_origin(@inner_composite.size.x, @scrolled_composite.origin.y)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
|
58
|
+
button {
|
59
|
+
text '^^'
|
60
|
+
|
61
|
+
on_widget_selected do
|
62
|
+
@scrolled_composite.set_origin(@scrolled_composite.origin.x, 0)
|
63
|
+
end
|
64
|
+
}
|
65
|
+
|
66
|
+
button {
|
67
|
+
text 'vv'
|
68
|
+
|
69
|
+
on_widget_selected do
|
70
|
+
@scrolled_composite.set_origin(@scrolled_composite.origin.x, @inner_composite.size.y)
|
71
|
+
end
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
@scrolled_composite = scrolled_composite {
|
76
|
+
layout_data :fill, :fill, true, true
|
77
|
+
|
78
|
+
@inner_composite = composite {
|
79
|
+
row_layout(:vertical)
|
80
|
+
|
81
|
+
background :white
|
82
|
+
|
83
|
+
50.times do |n|
|
84
|
+
label {
|
85
|
+
layout_data {
|
86
|
+
height 20
|
87
|
+
}
|
88
|
+
|
89
|
+
text "Line #{n+1} has a lot of gibberish in it. In fact, it has so much gibberish that it does not fit the window horizontally, so scrollbars must be used to see all the text."
|
90
|
+
background :white
|
91
|
+
}
|
92
|
+
end
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}.open
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-swt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.21.2.
|
4
|
+
version: 4.21.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -667,6 +667,7 @@ files:
|
|
667
667
|
- samples/hello/hello_radio_group.rb
|
668
668
|
- samples/hello/hello_sash_form.rb
|
669
669
|
- samples/hello/hello_scale.rb
|
670
|
+
- samples/hello/hello_scrolled_composite.rb
|
670
671
|
- samples/hello/hello_shape.rb
|
671
672
|
- samples/hello/hello_shell.rb
|
672
673
|
- samples/hello/hello_slider.rb
|