glimmer-dsl-swt 4.17.7.0 → 4.17.8.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 +12 -3
- data/README.md +82 -82
- data/VERSION +1 -1
- data/glimmer-dsl-swt.gemspec +9 -3
- data/lib/glimmer/data_binding/tree_items_binding.rb +20 -2
- data/lib/glimmer/dsl/swt/dialog_expression.rb +1 -0
- data/lib/glimmer/dsl/swt/directory_dialog_expression.rb +48 -0
- data/lib/glimmer/dsl/swt/file_dialog_expression.rb +48 -0
- data/lib/glimmer/dsl/swt/shell_expression.rb +4 -4
- data/lib/glimmer/dsl/swt/widget_expression.rb +9 -9
- data/lib/glimmer/swt/custom/code_text.rb +25 -18
- data/lib/glimmer/swt/directory_dialog_proxy.rb +65 -0
- data/lib/glimmer/swt/file_dialog_proxy.rb +66 -0
- data/lib/glimmer/swt/menu_proxy.rb +4 -4
- data/lib/glimmer/swt/shell_proxy.rb +6 -6
- data/lib/glimmer/swt/widget_proxy.rb +25 -25
- data/lib/glimmer/ui/custom_shell.rb +4 -4
- data/samples/hello/hello_directory_dialog.rb +60 -0
- data/samples/hello/hello_file_dialog.rb +60 -0
- data/samples/hello/hello_list_single_selection.rb +5 -5
- data/samples/hello/hello_world.rb +4 -4
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 355a2721d685e2440ad536721df4f543e292e0cf76c2b0740bbe3413eced552c
|
4
|
+
data.tar.gz: 4829dc246b8af10a25cd93050d8866b7bb9be01adab985af3553327216dc98c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4d965caa8a53d051328d04dd65261d4cd80a37b64ddd8d8bf30ddeb569673f4ad0bf4be78e2fb8dd3a09776d780862c5d6561cadcb80a601b2900674e54a36e
|
7
|
+
data.tar.gz: '06994b5fbc21286770e6cf422d208a2ecfa929b485ffce27c80789250a58452ca98e9bcef825aefe748de15f57da7833c98e0848580f4be26297cd811037bfd8'
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
### 4.17.8.0
|
4
|
+
|
5
|
+
- Officially Support SWT FileDialog with the `file_dialog` keyword (was unofficially supported before via standard SWT)
|
6
|
+
- Officially Support SWT DirectoryDialog with the `directory_dialog` keyword (was unofficially supported before via standard SWT)
|
7
|
+
- Hello, File Dialog! Sample
|
8
|
+
- Hello, Directory Dialog! Sample
|
9
|
+
- Prevent tree items data-binding from updating if no tree data change occurred
|
10
|
+
- Performance optimization for `code_text` syntax highlighting through caching
|
11
|
+
|
3
12
|
### 4.17.7.0
|
4
13
|
|
5
14
|
- `checkbox_group` built-in custom widget
|
@@ -138,7 +147,7 @@
|
|
138
147
|
|
139
148
|
- Add User Profile sample from DZone article
|
140
149
|
- Colored Ruby syntax highlighting for sample:code and sample:run tasks courtesy of tty-markdown
|
141
|
-
- Support `check` as alias to `checkbox` DSL keyword for Button widget with :check style.
|
150
|
+
- Support `check` as alias to `checkbox` DSL keyword for Button widget with :check style.
|
142
151
|
- Validate scaffolded custom shell gem name to ensure it doesn't clash with a built in Ruby method
|
143
152
|
- GLIMMER_LOGGER_ASYNC env var for disabling async logging when needed for immediate troubleshooting purposes
|
144
153
|
- Fix issue with table equivalent sort edge case (that is two sorts that are equivalent causing an infinite loop of resorting since the table is not correctly identified as sorted already)
|
@@ -337,7 +346,7 @@
|
|
337
346
|
## 0.1.3
|
338
347
|
|
339
348
|
- Added 'org.eclipse.swt.dnd' to glimmer auto-included Java packages
|
340
|
-
- Updated Tic Tac Toe sample to use new `message_box` keyword
|
349
|
+
- Updated Tic Tac Toe sample to use new `message_box` keyword
|
341
350
|
- Add DragSource and DropTarget transfer expression that takes a symbol or symbol array representing one or more of the following: FileTransfer, HTMLTransfer, ImageTransfer, RTFTransfer, TextTransfer, URLTransfer
|
342
351
|
- Set default style DND::DROP_COPY in DragSource and DropTarget widgets
|
343
352
|
- Support Glimmer::SWT::DNDProxy for handling Drop & Drop styles
|
@@ -357,4 +366,4 @@
|
|
357
366
|
|
358
367
|
## 0.1.0
|
359
368
|
|
360
|
-
- Extracted Glimmer DSL for SWT (glimmer-dsl-swt gem) from Glimmer
|
369
|
+
- Extracted Glimmer DSL for SWT (glimmer-dsl-swt gem) from Glimmer
|
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.17.
|
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.17.8.0
|
2
2
|
## JRuby Desktop Development GUI Library
|
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)
|
@@ -18,7 +18,7 @@ Gem version numbers are in sync with the SWT library versions. The first two dig
|
|
18
18
|
|
19
19
|
[Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) versions 4.17.x.y come with [SWT 4.17](https://download.eclipse.org/eclipse/downloads/drops4/R-4.17-202009021800/), which was released on September 2, 2020.
|
20
20
|
|
21
|
-
[<img src="https://covers.oreillystatic.com/images/9780596519650/lrg.jpg" width=105 /><br />
|
21
|
+
[<img src="https://covers.oreillystatic.com/images/9780596519650/lrg.jpg" width=105 /><br />
|
22
22
|
Featured in<br />JRuby Cookbook](http://shop.oreilly.com/product/9780596519650.do)
|
23
23
|
|
24
24
|
Glimmer DSL gems:
|
@@ -434,7 +434,7 @@ Otherwise, Option 2 ([Bundler](#option-2-bundler)) can be followed in rare cases
|
|
434
434
|
|
435
435
|
Note: if you encounter any [issues](https://github.com/AndyObtiva/glimmer-dsl-swt/issues), please [report](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) and then install a previous version instead from the list of [Glimmer Releases](https://rubygems.org/gems/glimmer-dsl-swt/versions).
|
436
436
|
|
437
|
-
### Option 1: Direct Install
|
437
|
+
### Option 1: Direct Install
|
438
438
|
(Use for [Scaffolding](#scaffolding))
|
439
439
|
|
440
440
|
Run this command to install directly:
|
@@ -444,10 +444,10 @@ jgem install glimmer-dsl-swt
|
|
444
444
|
|
445
445
|
Or this command if you want a specific version:
|
446
446
|
```
|
447
|
-
jgem install glimmer-dsl-swt -v 4.17.
|
447
|
+
jgem install glimmer-dsl-swt -v 4.17.8.0
|
448
448
|
```
|
449
449
|
|
450
|
-
`jgem` is JRuby's version of `gem` command.
|
450
|
+
`jgem` is JRuby's version of `gem` command.
|
451
451
|
RVM allows running `gem install` directly as an alias.
|
452
452
|
Otherwise, you may also run `jruby -S gem install ...`
|
453
453
|
|
@@ -457,7 +457,7 @@ Otherwise, if you are ready to build a Glimmer app, you can jump to the [Glimmer
|
|
457
457
|
|
458
458
|
Note: if you're using activerecord or activesupport, keep in mind that Glimmer unhooks ActiveSupport::Dependencies as it does not rely on it.
|
459
459
|
|
460
|
-
### Option 2: Bundler
|
460
|
+
### Option 2: Bundler
|
461
461
|
(Use for Manual App Creation)
|
462
462
|
|
463
463
|
Add the following to `Gemfile`:
|
@@ -484,7 +484,7 @@ You can bring up usage instructions by running the `glimmer` command without arg
|
|
484
484
|
glimmer
|
485
485
|
```
|
486
486
|
|
487
|
-
On Mac and Linux, it additionally brings up a TUI (Text-based User Interface) for interactive navigation and execution of Glimmer tasks (courtesy of [rake-tui](https://github.com/AndyObtiva/rake-tui)).
|
487
|
+
On Mac and Linux, it additionally brings up a TUI (Text-based User Interface) for interactive navigation and execution of Glimmer tasks (courtesy of [rake-tui](https://github.com/AndyObtiva/rake-tui)).
|
488
488
|
|
489
489
|
On Windows, it simply lists the available Glimmer tasks at the end (courtsey of [rake](https://github.com/ruby/rake)).
|
490
490
|
|
@@ -520,13 +520,13 @@ bin/glimmer samples
|
|
520
520
|
Below are the full usage instructions that come up when running `glimmer` without args.
|
521
521
|
|
522
522
|
```
|
523
|
-
Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v4.17.
|
523
|
+
Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v4.17.8.0
|
524
524
|
|
525
525
|
Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
|
526
526
|
|
527
|
-
Runs Glimmer applications and tasks.
|
527
|
+
Runs Glimmer applications and tasks.
|
528
528
|
|
529
|
-
When applications are specified, they are run using JRuby,
|
529
|
+
When applications are specified, they are run using JRuby,
|
530
530
|
automatically preloading the glimmer Ruby gem and SWT jar dependency.
|
531
531
|
|
532
532
|
Optionally, extra Glimmer options, JRuby options, and/or environment variables may be passed in.
|
@@ -549,11 +549,11 @@ Select a Glimmer task to run: (Press ↑/↓ arrow to move, Enter to select and
|
|
549
549
|
glimmer package[type] # Package app for distribution (generating config, jar, and native files) (type is optional)
|
550
550
|
glimmer package:clean # Clean by removing "dist" and "packages" directories
|
551
551
|
glimmer package:config # Generate JAR config file
|
552
|
-
glimmer package:gemspec # Generate gemspec
|
552
|
+
glimmer package:gemspec # Generate gemspec
|
553
553
|
glimmer package:jar # Generate JAR file
|
554
554
|
glimmer package:lock_jars # Lock JARs
|
555
555
|
glimmer package:native[type] # Generate Native files
|
556
|
-
glimmer run[app_path] # Runs Glimmer app or custom shell gem in the current directory, unless app_path is specified, then runs it instead (app_path is optional)
|
556
|
+
glimmer run[app_path] # Runs Glimmer app or custom shell gem in the current directory, unless app_path is specified, then runs it instead (app_path is optional)
|
557
557
|
glimmer samples # Brings up the Glimmer Meta-Sample app to allow browsing, running, and viewing code of Glimmer samples
|
558
558
|
glimmer scaffold[app_name] # Scaffold Glimmer application directory structure to build a new app
|
559
559
|
glimmer scaffold:customshell[name,namespace] # Scaffold Glimmer::UI::CustomShell subclass (full window view) under app/views (namespace is optional) [alt: scaffold:cs]
|
@@ -593,10 +593,10 @@ This brings up the [Glimmer Meta-Sample (The Sample of Samples)](#samples):
|
|
593
593
|
Glimmer borrows from Rails the idea of Scaffolding, that is generating a structure for your app files that
|
594
594
|
helps you get started just like true building scaffolding helps construction workers, civil engineers, and architects.
|
595
595
|
|
596
|
-
Glimmer scaffolding goes beyond just scaffolding the app files that Rails does. It also packages it and launches it,
|
596
|
+
Glimmer scaffolding goes beyond just scaffolding the app files that Rails does. It also packages it and launches it,
|
597
597
|
getting you to a running and delivered state of an advanced "Hello, World!" Glimmer application right off the bat.
|
598
598
|
|
599
|
-
This should greatly facilitate building a new Glimmer app by helping you be productive and focus on app details while
|
599
|
+
This should greatly facilitate building a new Glimmer app by helping you be productive and focus on app details while
|
600
600
|
letting Glimmer scaffolding take care of initial app file structure concerns, such as adding:
|
601
601
|
- Main application class that includes Glimmer (`app/{app_name}.rb`)
|
602
602
|
- Main application view that houses main window content, menu, about dialog, and preferences dialog
|
@@ -611,7 +611,7 @@ You need to have your Git `user.name` and `github.user` configured before scaffo
|
|
611
611
|
|
612
612
|
#### App
|
613
613
|
|
614
|
-
Before you start, make sure you are in a JRuby environment with Glimmer gem installed as per "Direct Install" pre-requisites.
|
614
|
+
Before you start, make sure you are in a JRuby environment with Glimmer gem installed as per "Direct Install" pre-requisites.
|
615
615
|
|
616
616
|
To scaffold a Glimmer app from scratch, run the following command:
|
617
617
|
|
@@ -705,7 +705,7 @@ The app even remembers your cookies if you log into the website, close the app,
|
|
705
705
|
|
706
706
|
Note that on Linux, the default SWT browser, which runs on webkit, does not support HTML5 Video out of the box. If you need video support, open `Gemfile` after scaffolding and enable the line that has the `glimmer-cw-browser-chromium` gem then replace the `browser` in "app/views/snowboard_utah/app_view.rb" with `browser(:chromium)`
|
707
707
|
|
708
|
-
Before you start, make sure you are in a JRuby environment with Glimmer gem installed as per "Direct Install" pre-requisites.
|
708
|
+
Before you start, make sure you are in a JRuby environment with Glimmer gem installed as per "Direct Install" pre-requisites.
|
709
709
|
|
710
710
|
To scaffold a Glimmer desktopify app from scratch, run the following command:
|
711
711
|
|
@@ -820,8 +820,8 @@ glimmer scaffold:cw[name]
|
|
820
820
|
|
821
821
|
#### Custom Shell Gem
|
822
822
|
|
823
|
-
Custom shell gems are self-contained Glimmer apps as well as reusable custom shells.
|
824
|
-
They have everything scaffolded Glimmer apps come with in addition to gem content like a [Juwelier](https://rubygems.org/gems/juwelier) Rakefile that can build gemspec and release gems.
|
823
|
+
Custom shell gems are self-contained Glimmer apps as well as reusable custom shells.
|
824
|
+
They have everything scaffolded Glimmer apps come with in addition to gem content like a [Juwelier](https://rubygems.org/gems/juwelier) Rakefile that can build gemspec and release gems.
|
825
825
|
Unlike scaffolded Glimmer apps, custom shell gem content lives under the `lib` directory (not `app`).
|
826
826
|
They can be packaged as both a native executable (e.g. Mac DMG/PKG/APP) and a Ruby gem.
|
827
827
|
Of course, you can just build a Ruby gem and disregard native executable packaging if you do not need it.
|
@@ -848,7 +848,7 @@ Since custom shell gems are both an app and a gem, they provide two ways to run:
|
|
848
848
|
- Run the `glimmer` command and pass it the generated script under the `bin` directory that matches the gem name (e.g. run `glimmer bin/glimmer-cs-calculator`)
|
849
849
|
- Run the executable shell script that ships with the gem directly (does not need the `glimmer` command). It intentionally has a shorter name for convenience since it is meant to be used on the command line (not in a package), so you can leave out the `glimmer-cs-` prefix (e.g. run `bin/calculator` directly). This is also used as the main way of running custom shell gems on Linux.
|
850
850
|
|
851
|
-
Examples:
|
851
|
+
Examples:
|
852
852
|
|
853
853
|
- [glimmer-cs-gladiator](https://github.com/AndyObtiva/glimmer-cs-gladiator): Gladiator (Glimmer Editor)
|
854
854
|
- [glimmer-cs-calculator](https://github.com/AndyObtiva/glimmer-cs-calculator): Glimmer Calculator
|
@@ -874,7 +874,7 @@ The Ruby gem name will follow the convention "glimmer-cw-customwidgetname-namesp
|
|
874
874
|
|
875
875
|
Only official Glimmer gems created by the Glimmer project committers will have no namespace (e.g. [glimmer-cw-video](https://rubygems.org/gems/glimmer-cw-video) Ruby gem)
|
876
876
|
|
877
|
-
Examples:
|
877
|
+
Examples:
|
878
878
|
|
879
879
|
- [glimmer-cw-video](https://github.com/AndyObtiva/glimmer-cw-video): Video Widget
|
880
880
|
- [glimmer-cw-cdatetime-nebula](https://github.com/AndyObtiva/glimmer-cw-cdatetime-nebula): Nebula CDateTime Widget
|
@@ -909,11 +909,11 @@ Output:
|
|
909
909
|
|
910
910
|
Glimmer Custom Shell Gems at rubygems.org:
|
911
911
|
|
912
|
-
Name Gem Version Author Description
|
912
|
+
Name Gem Version Author Description
|
913
913
|
|
914
|
-
Calculator glimmer-cs-calculator 1.0.2 Andy Maleh Calculator - Glimmer Custom Shell
|
915
|
-
Gladiator glimmer-cs-gladiator 0.2.4 Andy Maleh Gladiator (Glimmer Editor) - Glimmer Custom Shell
|
916
|
-
Timer glimmer-cs-timer 1.0.0 Andy Maleh Timer - Glimmer Custom Shell
|
914
|
+
Calculator glimmer-cs-calculator 1.0.2 Andy Maleh Calculator - Glimmer Custom Shell
|
915
|
+
Gladiator glimmer-cs-gladiator 0.2.4 Andy Maleh Gladiator (Glimmer Editor) - Glimmer Custom Shell
|
916
|
+
Timer glimmer-cs-timer 1.0.0 Andy Maleh Timer - Glimmer Custom Shell
|
917
917
|
|
918
918
|
```
|
919
919
|
|
@@ -945,9 +945,9 @@ Output:
|
|
945
945
|
|
946
946
|
Glimmer Custom Widget Gems matching [video] at rubygems.org:
|
947
947
|
|
948
|
-
Name Gem Version Author Description
|
948
|
+
Name Gem Version Author Description
|
949
949
|
|
950
|
-
Video glimmer-cw-video 1.0.0 Andy Maleh Glimmer Custom Widget - Video
|
950
|
+
Video glimmer-cw-video 1.0.0 Andy Maleh Glimmer Custom Widget - Video
|
951
951
|
|
952
952
|
```
|
953
953
|
|
@@ -965,11 +965,11 @@ Output:
|
|
965
965
|
|
966
966
|
Glimmer Custom Widget Gems at rubygems.org:
|
967
967
|
|
968
|
-
Name Gem Version Author Description
|
968
|
+
Name Gem Version Author Description
|
969
969
|
|
970
|
-
Browser (Chromium) glimmer-cw-browser-chromium 1.0.0 Andy Maleh Chromium Browser - Glimmer Custom Widget
|
971
|
-
Cdatetime (Nebula) glimmer-cw-cdatetime-nebula 1.5.0.0.1 Andy Maleh Nebula CDateTime Widget - Glimmer Custom Widget
|
972
|
-
Video glimmer-cw-video 1.0.0 Andy Maleh Glimmer Custom Widget - Video
|
970
|
+
Browser (Chromium) glimmer-cw-browser-chromium 1.0.0 Andy Maleh Chromium Browser - Glimmer Custom Widget
|
971
|
+
Cdatetime (Nebula) glimmer-cw-cdatetime-nebula 1.5.0.0.1 Andy Maleh Nebula CDateTime Widget - Glimmer Custom Widget
|
972
|
+
Video glimmer-cw-video 1.0.0 Andy Maleh Glimmer Custom Widget - Video
|
973
973
|
|
974
974
|
```
|
975
975
|
|
@@ -993,13 +993,13 @@ Output:
|
|
993
993
|
|
994
994
|
Glimmer DSL Gems at rubygems.org:
|
995
995
|
|
996
|
-
Name Gem Version Author Description
|
996
|
+
Name Gem Version Author Description
|
997
997
|
|
998
|
-
Css glimmer-dsl-css 1.1.0 AndyMaleh Glimmer DSL for CSS
|
999
|
-
Opal glimmer-dsl-opal 0.4.0 AndyMaleh Glimmer DSL for Opal
|
1000
|
-
Swt glimmer-dsl-swt 4.17.
|
1001
|
-
Tk glimmer-dsl-tk 0.0.6 AndyMaleh Glimmer DSL for Tk
|
1002
|
-
Xml glimmer-dsl-xml 1.1.0 AndyMaleh Glimmer DSL for XML
|
998
|
+
Css glimmer-dsl-css 1.1.0 AndyMaleh Glimmer DSL for CSS
|
999
|
+
Opal glimmer-dsl-opal 0.4.0 AndyMaleh Glimmer DSL for Opal
|
1000
|
+
Swt glimmer-dsl-swt 4.17.8.0 AndyMaleh Glimmer DSL for SWT
|
1001
|
+
Tk glimmer-dsl-tk 0.0.6 AndyMaleh Glimmer DSL for Tk
|
1002
|
+
Xml glimmer-dsl-xml 1.1.0 AndyMaleh Glimmer DSL for XML
|
1003
1003
|
```
|
1004
1004
|
|
1005
1005
|
### Packaging
|
@@ -1142,7 +1142,7 @@ Static keywords are pre-identified keywords in the Glimmer DSL, such as `shell`,
|
|
1142
1142
|
|
1143
1143
|
Dynamic keywords are dynamically figured out from currently imported (aka required/loaded) SWT widgets and custom widgets. Examples are: `label`, `combo`, and `list` for SWT widgets and `c_date_time`, `video`, and `gantt_chart` for custom widgets.
|
1144
1144
|
|
1145
|
-
The only reason to distinguish between the two is to realize that importing new Glimmer [custom widgets](#custom-widgets) and Java SWT custom widget libraries automatically expands Glimmer's DSL vocabulary with new dynamic keywords.
|
1145
|
+
The only reason to distinguish between the two is to realize that importing new Glimmer [custom widgets](#custom-widgets) and Java SWT custom widget libraries automatically expands Glimmer's DSL vocabulary with new dynamic keywords.
|
1146
1146
|
|
1147
1147
|
For example, if a project adds this custom Java SWT library from the [Nebula Project](https://www.eclipse.org/nebula/):
|
1148
1148
|
|
@@ -1394,10 +1394,10 @@ message_box {
|
|
1394
1394
|
|
1395
1395
|
#### Display
|
1396
1396
|
|
1397
|
-
The SWT `Display` class is a singleton in Glimmer. It is used in SWT to represent your display device, allowing you to manage GUI globally
|
1397
|
+
The SWT `Display` class is a singleton in Glimmer. It is used in SWT to represent your display device, allowing you to manage GUI globally
|
1398
1398
|
and access available monitors. Additionally, it is responsible for the SWT event loop, which runs on the first thread the Glimmer application starts on. In multi-threaded programming, `Display` provides the methods `async_exec` and `sync_exec` to enable enqueuing GUI changes asynchronously or synchronously from threads other than the main (first) thread since direct GUI changes are forbidden from other threads by design.
|
1399
1399
|
|
1400
|
-
`Display` is automatically instantiated upon first instantiation of a `shell` widget.
|
1400
|
+
`Display` is automatically instantiated upon first instantiation of a `shell` widget.
|
1401
1401
|
|
1402
1402
|
Alternatively, for advanced use cases, a `Display` can be created explicitly with the Glimmer `display` keyword. When a `shell` is later declared, it
|
1403
1403
|
automatically uses the `display` created earlier without having to explicitly hook it.
|
@@ -1413,7 +1413,7 @@ automatically uses the `display` created earlier without having to explicitly ho
|
|
1413
1413
|
@shell = shell { # uses display created above
|
1414
1414
|
}
|
1415
1415
|
```
|
1416
|
-
The benefit of instantiating an SWT Display explicitly is to set [Properties](#widget-properties) or [Observers](#observer).
|
1416
|
+
The benefit of instantiating an SWT Display explicitly is to set [Properties](#widget-properties) or [Observers](#observer).
|
1417
1417
|
Although SWT Display is not technically a widget, it has similar APIs and DSL support.
|
1418
1418
|
|
1419
1419
|
#### Multi-Threading
|
@@ -1635,8 +1635,8 @@ https://help.eclipse.org/2019-12/nftopic/org.eclipse.platform.doc.isv/reference/
|
|
1635
1635
|
|
1636
1636
|
When building a widget-related SWT object manually (e.g. `GridData.new(...)`), you are expected to use `SWT::CONSTANT` directly or BIT-OR a few SWT constants together like `SWT::BORDER | SWT::V_SCROLL`.
|
1637
1637
|
|
1638
|
-
Glimmer facilitates that with `swt` keyword by allowing you to pass multiple styles as an argument array of symbols instead of dealing with BIT-OR.
|
1639
|
-
Example:
|
1638
|
+
Glimmer facilitates that with `swt` keyword by allowing you to pass multiple styles as an argument array of symbols instead of dealing with BIT-OR.
|
1639
|
+
Example:
|
1640
1640
|
|
1641
1641
|
```ruby
|
1642
1642
|
style = swt(:border, :v_scroll)
|
@@ -1644,7 +1644,7 @@ style = swt(:border, :v_scroll)
|
|
1644
1644
|
|
1645
1645
|
#### Negative SWT Style Bits
|
1646
1646
|
|
1647
|
-
In rare occasions, you might need to apply & with a negative (not) style bit to negate it from another style bit that includes it.
|
1647
|
+
In rare occasions, you might need to apply & with a negative (not) style bit to negate it from another style bit that includes it.
|
1648
1648
|
Glimmer facilitates that by declaring the negative style bit via postfixing a symbol with `!`.
|
1649
1649
|
|
1650
1650
|
Example:
|
@@ -1653,13 +1653,13 @@ Example:
|
|
1653
1653
|
style = swt(:shell_trim, :max!) # creates a shell trim style without the maximize button (negated)
|
1654
1654
|
```
|
1655
1655
|
|
1656
|
-
#### Extra SWT Styles
|
1656
|
+
#### Extra SWT Styles
|
1657
1657
|
|
1658
1658
|
##### Non-resizable Window
|
1659
1659
|
|
1660
1660
|
SWT Shell widget by default is resizable. To make it non-resizable, one must pass a complicated style bit concoction like `swt(:shell_trim, :resize!, :max!)`.
|
1661
1661
|
|
1662
|
-
Glimmer makes this easier by alternatively offering a `:no_resize` extra SWT style, added for convenience.
|
1662
|
+
Glimmer makes this easier by alternatively offering a `:no_resize` extra SWT style, added for convenience.
|
1663
1663
|
This makes declaring a non-resizable window as easy as:
|
1664
1664
|
|
1665
1665
|
```ruby
|
@@ -1822,7 +1822,7 @@ Example:
|
|
1822
1822
|
|
1823
1823
|
```ruby
|
1824
1824
|
shell {
|
1825
|
-
minimum_size 128, 128
|
1825
|
+
minimum_size 128, 128
|
1826
1826
|
cursor :appstarting
|
1827
1827
|
}
|
1828
1828
|
```
|
@@ -2211,7 +2211,7 @@ It assumes you have defined the table columns via `table_column` widget.
|
|
2211
2211
|
Example:
|
2212
2212
|
|
2213
2213
|
```ruby
|
2214
|
-
shell {
|
2214
|
+
shell {
|
2215
2215
|
@table = table {
|
2216
2216
|
table_column {
|
2217
2217
|
text "Name"
|
@@ -2229,13 +2229,13 @@ shell {
|
|
2229
2229
|
selection bind(group, :selected_person)
|
2230
2230
|
on_mouse_up { |event|
|
2231
2231
|
@table.edit_table_item(event.table_item, event.column_index)
|
2232
|
-
}
|
2232
|
+
}
|
2233
2233
|
}
|
2234
2234
|
}
|
2235
2235
|
```
|
2236
2236
|
|
2237
2237
|
The code above includes two data-bindings:
|
2238
|
-
- Table `items`, which first bind to the model collection property (group.people), and then maps each column property (name, age, adult) for displaying each table item column.
|
2238
|
+
- Table `items`, which first bind to the model collection property (group.people), and then maps each column property (name, age, adult) for displaying each table item column.
|
2239
2239
|
- Table `selection`, which binds the single table item selected by the user to the attribute denoted by the `bind` keyword (or binds multiple table items selected for a table with `:multi` SWT style)
|
2240
2240
|
- The `on_mouse_up` event handler invokes `@table.edit_table_item(event.table_item, event.column_index)` to start edit mode on the clicked table item cell, and then saves or cancel depending on whether the user hits ENTER or ESC once done editing (or focus-out after either making a change or not making any changes.)
|
2241
2241
|
|
@@ -2252,16 +2252,16 @@ found_array = @table.search { |table_item| table_item.getData == company.owner }
|
|
2252
2252
|
|
2253
2253
|
This finds a person. The array is a Java array. This enables easy passing of it to SWT `Table#setSelection` method, which expects a Java array of `TableItem` objects.
|
2254
2254
|
|
2255
|
-
To edit a table, you must invoke `TableProxy#edit_selected_table_item(column_index, before_write: nil, after_write: nil, after_cancel: nil)` or `TableProxy#edit_table_item(table_item, column_index, before_write: nil, after_write: nil, after_cancel: nil)`.
|
2256
|
-
This automatically leverages the SWT TableEditor custom class behind the scenes, displaying a text widget to the user to change the selected or
|
2257
|
-
passed table item text into something else.
|
2255
|
+
To edit a table, you must invoke `TableProxy#edit_selected_table_item(column_index, before_write: nil, after_write: nil, after_cancel: nil)` or `TableProxy#edit_table_item(table_item, column_index, before_write: nil, after_write: nil, after_cancel: nil)`.
|
2256
|
+
This automatically leverages the SWT TableEditor custom class behind the scenes, displaying a text widget to the user to change the selected or
|
2257
|
+
passed table item text into something else.
|
2258
2258
|
It automatically persists the change to `items` data-bound model on ENTER/FOCUS-OUT or cancels on ESC/NO-CHANGE.
|
2259
2259
|
|
2260
2260
|
##### Table Sorting
|
2261
2261
|
|
2262
|
-
Glimmer automatically adds sorting support to the SWT `Table` widget.
|
2262
|
+
Glimmer automatically adds sorting support to the SWT `Table` widget.
|
2263
2263
|
|
2264
|
-
Check out the [Contact Manager](#contact-manager) sample for an example.
|
2264
|
+
Check out the [Contact Manager](#contact-manager) sample for an example.
|
2265
2265
|
You may click on any column and it will sort by ascending order first and descending if you click again.
|
2266
2266
|
|
2267
2267
|
Glimmer automatic table sorting supports `String`, `Integer`, and `Float` columns out of the box as well as any column data that is comparable.
|
@@ -2269,7 +2269,7 @@ Glimmer automatic table sorting supports `String`, `Integer`, and `Float` column
|
|
2269
2269
|
In cases where data is nil, depending on the data-type, it is automatically converted to `Float` with `to_f`, `Integer` with `to_i`, or `String` with `to_s`.
|
2270
2270
|
|
2271
2271
|
Should you have a special data type that could not be compared automatically, Glimmer offers the following 3 alternatives for custom sorting:
|
2272
|
-
- `sort_property`: this may be set to an alternative property to the one data-bound to the table column. For example, a table column called 'adult', which returns `true` or `false` may be sorted with `sort_property :dob` instead. This also support multi-property (aka multi-column) sorting (e.g. `sort_property :dob, :name`).
|
2272
|
+
- `sort_property`: this may be set to an alternative property to the one data-bound to the table column. For example, a table column called 'adult', which returns `true` or `false` may be sorted with `sort_property :dob` instead. This also support multi-property (aka multi-column) sorting (e.g. `sort_property :dob, :name`).
|
2273
2273
|
- `sort_by(&block)`: this works just like Ruby `Enumerable` `sort_by`. The block receives the table column data as argument.
|
2274
2274
|
- `sort(&comparator)`: this works just like Ruby `Enumerable` `sort`. The comparator block receives two objects from the table column data.
|
2275
2275
|
|
@@ -2329,7 +2329,7 @@ This involves using the `bind` keyword mentioned above in addition to a special
|
|
2329
2329
|
Example:
|
2330
2330
|
|
2331
2331
|
```ruby
|
2332
|
-
shell {
|
2332
|
+
shell {
|
2333
2333
|
@tree = tree {
|
2334
2334
|
items bind(company, :owner), tree_properties(children: :coworkers, text: :name)
|
2335
2335
|
selection bind(company, :selected_coworker)
|
@@ -2338,7 +2338,7 @@ shell {
|
|
2338
2338
|
```
|
2339
2339
|
|
2340
2340
|
The code above includes two data-bindings:
|
2341
|
-
- Tree `items`, which first bind to the root node (company.owner), and then dig down via `coworkers` `children` method, using the `name` `text` attribute for displaying each tree item.
|
2341
|
+
- Tree `items`, which first bind to the root node (company.owner), and then dig down via `coworkers` `children` method, using the `name` `text` attribute for displaying each tree item.
|
2342
2342
|
- Tree `selection`, which binds the single tree item selected by the user to the attribute denoted by the `bind` keyword
|
2343
2343
|
|
2344
2344
|
Additionally, Tree `items` data-binding automatically stores each node model unto the SWT TreeItem object via `setData` method. This enables things like searchability.
|
@@ -2392,7 +2392,7 @@ Let's revisit the Tic Tac Toe example shown near the beginning of the page:
|
|
2392
2392
|
shell {
|
2393
2393
|
text "Tic-Tac-Toe"
|
2394
2394
|
minimum_size 150, 178
|
2395
|
-
composite {
|
2395
|
+
composite {
|
2396
2396
|
grid_layout 3, true
|
2397
2397
|
(1..3).each { |row|
|
2398
2398
|
(1..3).each { |column|
|
@@ -2442,7 +2442,7 @@ shell {
|
|
2442
2442
|
@button1.swt_widget.setVisible(false)
|
2443
2443
|
}
|
2444
2444
|
on_widget_selected {
|
2445
|
-
@button1.swt_widget.setVisible(true)
|
2445
|
+
@button1.swt_widget.setVisible(true)
|
2446
2446
|
}
|
2447
2447
|
}
|
2448
2448
|
}.open
|
@@ -2464,7 +2464,7 @@ Example (you may copy/paste in [`girb`](#girb-glimmer-irb-command)):
|
|
2464
2464
|
}
|
2465
2465
|
@shell.on_shell_iconified {
|
2466
2466
|
@shell.close
|
2467
|
-
}
|
2467
|
+
}
|
2468
2468
|
@shell.open
|
2469
2469
|
```
|
2470
2470
|
|
@@ -2586,7 +2586,7 @@ Usage:
|
|
2586
2586
|
```ruby
|
2587
2587
|
shell {
|
2588
2588
|
red_label(:center) {
|
2589
|
-
text 'Red Label'
|
2589
|
+
text 'Red Label'
|
2590
2590
|
foreground :green
|
2591
2591
|
}
|
2592
2592
|
}.open
|
@@ -2653,7 +2653,7 @@ Additionally, custom widgets can call the following class methods:
|
|
2653
2653
|
- `::options(*option_names)`: declares a list of options by taking an option name array (symbols/strings). This generates option attribute accessors (e.g. `options :orientation, :bg_color` generates `#orientation`, `#orientation=(v)`, `#bg_color`, and `#bg_color=(v)` attribute accessors)
|
2654
2654
|
- `::option(option_name, default: nil)`: declares a single option taking option name and default value as arguments (also generates attribute accessors just like `::options`)
|
2655
2655
|
|
2656
|
-
#### Content/Options Example
|
2656
|
+
#### Content/Options Example
|
2657
2657
|
|
2658
2658
|
(you may copy/paste in [`girb`](#girb-glimmer-irb-command))
|
2659
2659
|
|
@@ -2785,7 +2785,7 @@ shell { |app_shell|
|
|
2785
2785
|
app_shell.hide
|
2786
2786
|
@wizard_steps[@current_step_number - 1].open
|
2787
2787
|
end
|
2788
|
-
}
|
2788
|
+
}
|
2789
2789
|
}
|
2790
2790
|
}
|
2791
2791
|
button {
|
@@ -3154,7 +3154,7 @@ To use, simply use `code_text` in place of `text` or `styled_text` widget. If yo
|
|
3154
3154
|
|
3155
3155
|
[![Video Widget](images/glimmer-video-widget.png)](https://github.com/AndyObtiva/glimmer-cw-video)
|
3156
3156
|
|
3157
|
-
Glimmer supports a [video custom widget](https://github.com/AndyObtiva/glimmer-cw-video) not in SWT.
|
3157
|
+
Glimmer supports a [video custom widget](https://github.com/AndyObtiva/glimmer-cw-video) not in SWT.
|
3158
3158
|
|
3159
3159
|
You may obtain via `glimmer-cw-video` gem.
|
3160
3160
|
|
@@ -3257,7 +3257,7 @@ Glimmer configuration may be done via the `Glimmer::Config` module.
|
|
3257
3257
|
### logger
|
3258
3258
|
|
3259
3259
|
The Glimmer DSL engine supports logging via a standard `STDOUT` Ruby `Logger` configured in the `Glimmer::Config.logger` config option.
|
3260
|
-
It is set to level Logger::ERROR by default.
|
3260
|
+
It is set to level Logger::ERROR by default.
|
3261
3261
|
Log level may be adjusted via `Glimmer::Config.logger.level` just like any other Ruby Logger.
|
3262
3262
|
|
3263
3263
|
Example:
|
@@ -3299,13 +3299,13 @@ This is an array of these possible values: `:stdout` (default), `:stderr`, `:fil
|
|
3299
3299
|
|
3300
3300
|
It defaults to `[:stdout, :syslog]`
|
3301
3301
|
|
3302
|
-
When `:file` is included, Glimmer creates a 'log' directory directly below the Glimmer app local directory.
|
3302
|
+
When `:file` is included, Glimmer creates a 'log' directory directly below the Glimmer app local directory.
|
3303
3303
|
It may also be customized further via the `logging_device_file_options` option.
|
3304
3304
|
This is useful on Windows as an alternative to `syslog`, which is not available on Windows by default.
|
3305
3305
|
|
3306
3306
|
#### logging_device_file_options
|
3307
3307
|
|
3308
|
-
This is a hash of [`logging`](https://github.com/TwP/logging) gem options for the `:file` logging device.
|
3308
|
+
This is a hash of [`logging`](https://github.com/TwP/logging) gem options for the `:file` logging device.
|
3309
3309
|
|
3310
3310
|
Default: `{size: 1_000_000, age: 'daily', roll_by: 'number'}`
|
3311
3311
|
|
@@ -3323,7 +3323,7 @@ That ensures asynchronous buffered logging that is flushed every 500 messages an
|
|
3323
3323
|
|
3324
3324
|
This is a [`logging`](https://github.com/TwP/logging) gem layout that formats the logging output.
|
3325
3325
|
|
3326
|
-
Default:
|
3326
|
+
Default:
|
3327
3327
|
|
3328
3328
|
```
|
3329
3329
|
Logging.layouts.pattern(
|
@@ -3383,8 +3383,8 @@ https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby
|
|
3383
3383
|
|
3384
3384
|
### loop_max_count
|
3385
3385
|
|
3386
|
-
Glimmer has infinite loop detection support.
|
3387
|
-
It can detect when an infinite loop is about to occur in method_missing and stops it.
|
3386
|
+
Glimmer has infinite loop detection support.
|
3387
|
+
It can detect when an infinite loop is about to occur in method_missing and stops it.
|
3388
3388
|
It detects potential infinite loops when the same keyword and args repeat more than 100 times, which is unusual in a GUI app.
|
3389
3389
|
|
3390
3390
|
The max limit can be changed via the `Glimmer::Config::loop_max_count=(count)` config option.
|
@@ -3851,7 +3851,7 @@ Gladiator is a good demonstration of:
|
|
3851
3851
|
|
3852
3852
|
The following production apps have been built with Glimmer.
|
3853
3853
|
|
3854
|
-
If you have a Glimmer app you would like referenced here, please mention in a Pull Request.
|
3854
|
+
If you have a Glimmer app you would like referenced here, please mention in a Pull Request.
|
3855
3855
|
|
3856
3856
|
### Math Bowling
|
3857
3857
|
|
@@ -3899,11 +3899,11 @@ The Glimmer packaging process done in the `glimmer package` command consists of
|
|
3899
3899
|
1. Generate JAR file using [Warbler](https://github.com/jruby/warbler) (`glimmer package:jar`): Enables bundling a Glimmer app into a JAR file under the `./dist` directory
|
3900
3900
|
1. Generate native executable using [javapackager](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html) (`glimmer package:native`): Enables packaging a JAR file as a DMG/PKG/APP file on Mac, MSI/EXE/APP on Windows, and DEB/RPM/APP on Linux (Glimmer does not officially support Linux with the `glimmer package` command yet, but it generates the JAR file successfully, and you could use `javapackager` manually afterwards if needed).
|
3901
3901
|
|
3902
|
-
Those steps automatically ensure generating a JAR file under the `./dist` directory using [Warbler](https://github.com/jruby/warbler), which is then used to automatically generate a DMG/MSI file (and other executables) under the `./packages/bundles` directory using `javapackager`.
|
3902
|
+
Those steps automatically ensure generating a JAR file under the `./dist` directory using [Warbler](https://github.com/jruby/warbler), which is then used to automatically generate a DMG/MSI file (and other executables) under the `./packages/bundles` directory using `javapackager`.
|
3903
3903
|
The JAR file name will match your application local directory name (e.g. `MathBowling.jar` for `~/code/MathBowling`)
|
3904
3904
|
The DMG file name will match the humanized local directory name + dash + application version (e.g. `Math Bowling-1.0.dmg` for `~/code/MathBowling` with version 1.0 or unspecified)
|
3905
3905
|
|
3906
|
-
The `glimmer package` command will automatically set "mac.CFBundleIdentifier" to ="org.#{project_name}.application.#{project_name}".
|
3906
|
+
The `glimmer package` command will automatically set "mac.CFBundleIdentifier" to ="org.#{project_name}.application.#{project_name}".
|
3907
3907
|
You may override by configuring as an extra argument for javapackger (e.g. Glimmer::RakeTask::Package.javapackager_extra_args = " -Bmac.CFBundleIdentifier=org.andymaleh.application.MathBowling")
|
3908
3908
|
|
3909
3909
|
### Packaging Defaults
|
@@ -3955,9 +3955,9 @@ require 'glimmer/rake_task'
|
|
3955
3955
|
Glimmer::RakeTask::Package.javapackager_extra_args = '-BlicenseType="MIT" -Bmac.category="public.app-category.business" -Bmac.signing-key-developer-id-app="Andy Maleh"'
|
3956
3956
|
```
|
3957
3957
|
|
3958
|
-
Note that `mac.category` defaults to "public.app-category.business", but can be overridden with one of the category UTI values mentioned here:
|
3958
|
+
Note that `mac.category` defaults to "public.app-category.business", but can be overridden with one of the category UTI values mentioned here:
|
3959
3959
|
|
3960
|
-
https://developer.apple.com/library/archive/releasenotes/General/SubmittingToMacAppStore/index.html#//apple_ref/doc/uid/TP40010572-CH16-SW8
|
3960
|
+
https://developer.apple.com/library/archive/releasenotes/General/SubmittingToMacAppStore/index.html#//apple_ref/doc/uid/TP40010572-CH16-SW8
|
3961
3961
|
|
3962
3962
|
Example (env var):
|
3963
3963
|
|
@@ -3973,7 +3973,7 @@ Pass `-v` to javapackager in `Glimmer::RakeTask::Package.javapackager_extra_args
|
|
3973
3973
|
|
3974
3974
|
### Windows Application Packaging
|
3975
3975
|
|
3976
|
-
Windows offers two options for setup packaging:
|
3976
|
+
Windows offers two options for setup packaging:
|
3977
3977
|
- `msi` (recommended): simpler packaging option. Requires [WiX Toolset](https://wixtoolset.org/) and [.NET Framework](https://dotnet.microsoft.com/download/dotnet-framework). Simply run `glimmer package[msi]` (or `glimmer package:native[msi]` if it's not your first time) and it will give you more details on the pre-requisites you need to install (e.g. [WiX Toolset](https://wixtoolset.org/) and [.NET Framework 3.5 SP1](https://dotnet.microsoft.com/download/dotnet-framework/net35-sp1)).
|
3978
3978
|
- `exe`: more advanced packaging option. Requires [Inno Setup](https://jrsoftware.org/isinfo.php). Simply run `glimmer package[exe]` (or `glimmer package:native[exe]` if it's not your first time) and it will tell you what you need to install.
|
3979
3979
|
|
@@ -4025,7 +4025,7 @@ Now, when you run `glimmer package`, it builds a self-signed DMG file. When you
|
|
4025
4025
|
|
4026
4026
|
1. Specifying License File
|
4027
4027
|
|
4028
|
-
The javapackager documentation states that a license file may be specified with "-BlicenseFile" javapackager option. However, in order for that to work, one must specify as a source file via "-srcfiles" javapackager option.
|
4028
|
+
The javapackager documentation states that a license file may be specified with "-BlicenseFile" javapackager option. However, in order for that to work, one must specify as a source file via "-srcfiles" javapackager option.
|
4029
4029
|
Keep that in mind if you are not going to rely on the default `LICENSE.txt` support.
|
4030
4030
|
|
4031
4031
|
Example:
|
@@ -4038,7 +4038,7 @@ Glimmer::RakeTask::Package.javapackager_extra_args = '-srcfiles "ACME.txt" -Blic
|
|
4038
4038
|
|
4039
4039
|
If you run `glimmer package` multiple times, sometimes it leaves a mounted DMG project in your finder. Unmount before you run the command again or it might fail with an error saying: "Error: Bundler "DMG Installer" (dmg) failed to produce a bundle."
|
4040
4040
|
|
4041
|
-
By the way, keep in mind that during normal operation, it does also indicate a false-negative while completing successfully similar to the following (please ignore):
|
4041
|
+
By the way, keep in mind that during normal operation, it does also indicate a false-negative while completing successfully similar to the following (please ignore):
|
4042
4042
|
|
4043
4043
|
```
|
4044
4044
|
Exec failed with code 2 command [[/usr/bin/SetFile, -c, icnC, /var/folders/4_/g1sw__tx6mjdgyh3mky7vydc0000gp/T/fxbundler4076750801763032201/images/MathBowling/.VolumeIcon.icns] in unspecified directory
|
@@ -4065,7 +4065,7 @@ Here is a list of notable 3rd party gems used by Glimmer:
|
|
4065
4065
|
|
4066
4066
|
## Glimmer Process
|
4067
4067
|
|
4068
|
-
[Glimmer Process](https://github.com/AndyObtiva/glimmer/blob/master/PROCESS.md) is the lightweight software development process used for building Glimmer libraries and Glimmer apps, which goes beyond Agile, rendering all Agile processes obsolete. [Glimmer Process](PROCESS.md) is simply made up of 7 guidelines to pick and choose as necessary until software development needs are satisfied.
|
4068
|
+
[Glimmer Process](https://github.com/AndyObtiva/glimmer/blob/master/PROCESS.md) is the lightweight software development process used for building Glimmer libraries and Glimmer apps, which goes beyond Agile, rendering all Agile processes obsolete. [Glimmer Process](PROCESS.md) is simply made up of 7 guidelines to pick and choose as necessary until software development needs are satisfied.
|
4069
4069
|
|
4070
4070
|
Learn more by reading the [GPG](https://github.com/AndyObtiva/glimmer/blob/master/PROCESS.md) (Glimmer Process Guidelines)
|
4071
4071
|
|
@@ -4088,7 +4088,7 @@ You may submit [issues](https://github.com/AndyObtiva/glimmer-dsl-swt/issues) on
|
|
4088
4088
|
|
4089
4089
|
### Chat
|
4090
4090
|
|
4091
|
-
If you need live help, try to [![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)
|
4091
|
+
If you need live help, try to [![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)
|
4092
4092
|
|
4093
4093
|
## Feature Suggestions
|
4094
4094
|
|
@@ -4135,8 +4135,8 @@ If your company would like to invest fulltime in further development of the Glim
|
|
4135
4135
|
|
4136
4136
|
[MIT](LICENSE.txt)
|
4137
4137
|
|
4138
|
-
Copyright (c) 2007-2020 - Andy Maleh.
|
4138
|
+
Copyright (c) 2007-2020 - Andy Maleh.
|
4139
4139
|
|
4140
4140
|
--
|
4141
4141
|
|
4142
|
-
[<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=40 />](https://github.com/AndyObtiva/glimmer) Built for [Glimmer](https://github.com/AndyObtiva/glimmer) (Ruby Desktop Development GUI Library).
|
4142
|
+
[<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=40 />](https://github.com/AndyObtiva/glimmer) Built for [Glimmer](https://github.com/AndyObtiva/glimmer) (Ruby Desktop Development GUI Library).
|