glimmer-dsl-swt 4.18.7.3 → 4.19.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -0
  3. data/README.md +126 -20
  4. data/RUBY_VERSION +1 -1
  5. data/VERSION +1 -1
  6. data/bin/girb +10 -9
  7. data/bin/girb_runner.rb +8 -3
  8. data/bin/glimmer +10 -1
  9. data/bin/glimmer-setup +58 -0
  10. data/bin/glimmer_runner.rb +4 -0
  11. data/docs/reference/GLIMMER_COMMAND.md +98 -32
  12. data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +9 -7
  13. data/docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md +7 -1
  14. data/docs/reference/GLIMMER_SAMPLES.md +25 -0
  15. data/glimmer-dsl-swt.gemspec +0 -0
  16. data/lib/glimmer-dsl-swt.rb +8 -0
  17. data/lib/glimmer/data_binding/widget_binding.rb +1 -1
  18. data/lib/glimmer/dsl/swt/c_tab_item_expression.rb +58 -0
  19. data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +2 -1
  20. data/lib/glimmer/dsl/swt/tab_item_expression.rb +7 -3
  21. data/lib/glimmer/dsl/swt/widget_expression.rb +1 -1
  22. data/lib/glimmer/launcher.rb +27 -51
  23. data/lib/glimmer/rake_task.rb +37 -7
  24. data/lib/glimmer/rake_task/list.rb +8 -0
  25. data/lib/glimmer/rake_task/package.rb +7 -2
  26. data/lib/glimmer/rake_task/scaffold.rb +283 -207
  27. data/lib/glimmer/swt/c_tab_item_proxy.rb +53 -0
  28. data/lib/glimmer/swt/custom/code_text.rb +19 -3
  29. data/lib/glimmer/swt/custom/shape.rb +22 -4
  30. data/lib/glimmer/swt/image_proxy.rb +5 -1
  31. data/lib/glimmer/swt/sash_form_proxy.rb +6 -0
  32. data/lib/glimmer/swt/shell_proxy.rb +3 -1
  33. data/lib/glimmer/swt/tab_folder_proxy.rb +1 -0
  34. data/lib/glimmer/swt/tab_item_proxy.rb +17 -18
  35. data/lib/glimmer/swt/widget_proxy.rb +9 -0
  36. data/samples/elaborate/mandelbrot_fractal.rb +1 -1
  37. data/samples/elaborate/tetris.rb +1 -4
  38. data/samples/elaborate/tetris/view/bevel.rb +4 -1
  39. data/samples/elaborate/tetris/view/block.rb +1 -3
  40. data/samples/hello/hello_c_combo.rb +68 -0
  41. data/samples/hello/hello_c_tab.rb +271 -0
  42. data/samples/hello/hello_code_text.rb +141 -73
  43. data/samples/hello/hello_tab.rb +2 -0
  44. data/vendor/swt/linux/swt.jar +0 -0
  45. data/vendor/swt/mac/swt.jar +0 -0
  46. data/vendor/swt/windows/swt.jar +0 -0
  47. metadata +45 -15
@@ -0,0 +1,4 @@
1
+ require_relative '../lib/glimmer-dsl-swt'
2
+ require_relative '../lib/glimmer/launcher'
3
+
4
+ Glimmer::Launcher.new(ARGV).launch
@@ -44,7 +44,7 @@ bin/glimmer samples
44
44
  Below are the full usage instructions that come up when running `glimmer` without args.
45
45
 
46
46
  ```
47
- Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.18.4.4
47
+ Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.18.7.4
48
48
 
49
49
  Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
50
50
 
@@ -67,6 +67,7 @@ Tasks are run via rake. Some tasks take arguments in square brackets.
67
67
  Available tasks are below (if you do not see any, please add `require 'glimmer/rake_task'` to Rakefile and rerun or run rake -T):
68
68
 
69
69
  Select a Glimmer task to run: (Press ↑/↓ arrow to move, Enter to select and letters to filter)
70
+ glimmer list:gems:customshape[query] # List Glimmer custom shape gems available at rubygems.org (query is optional) [alt: list:gems:cp]
70
71
  ‣ glimmer list:gems:customshell[query] # List Glimmer custom shell gems available at rubygems.org (query is optional) [alt: list:gems:cs]
71
72
  glimmer list:gems:customwidget[query] # List Glimmer custom widget gems available at rubygems.org (query is optional) [alt: list:gems:cw]
72
73
  glimmer list:gems:dsl[query] # List Glimmer DSL gems available at rubygems.org (query is optional)
@@ -81,8 +82,11 @@ Select a Glimmer task to run: (Press ↑/↓ arrow to move, Enter to select and
81
82
  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)
82
83
  glimmer samples # Brings up the Glimmer Meta-Sample app to allow browsing, running, and viewing code of Glimmer samples
83
84
  glimmer scaffold[app_name] # Scaffold Glimmer application directory structure to build a new app
85
+ glimmer scaffold:customshape[name,namespace] # Scaffold Glimmer::UI::CustomShape subclass (part of a view) under app/views (namespace is optional) [alt: scaffold:cp]
84
86
  glimmer scaffold:customshell[name,namespace] # Scaffold Glimmer::UI::CustomShell subclass (full window view) under app/views (namespace is optional) [alt: scaffold:cs]
85
87
  glimmer scaffold:customwidget[name,namespace] # Scaffold Glimmer::UI::CustomWidget subclass (part of a view) under app/views (namespace is optional) [alt: scaffold:cw]
88
+ glimmer scaffold:desktopify[app_name,website] # Desktopify a web app
89
+ glimmer scaffold:gem:customshape[name,namespace] # Scaffold Glimmer::UI::CustomShape subclass (part of a view) under its own Ruby gem project (namespace is required) [alt: scaffold:gem:cp]
86
90
  glimmer scaffold:gem:customshell[name,namespace] # Scaffold Glimmer::UI::CustomShell subclass (full window view) under its own Ruby gem + app project (namespace is required) [alt: scaffold:ge...
87
91
  glimmer scaffold:gem:customwidget[name,namespace] # Scaffold Glimmer::UI::CustomWidget subclass (part of a view) under its own Ruby gem project (namespace is required) [alt: scaffold:gem:cw]
88
92
  ```
@@ -162,15 +166,12 @@ $ glimmer scaffold[greeter]
162
166
  create Rakefile
163
167
  create Gemfile
164
168
  create LICENSE.txt
165
- create README.rdoc
169
+ create README.markdown
166
170
  create .document
167
171
  create lib
168
- create lib/greeter.rb
169
- create spec
170
- create spec/spec_helper.rb
171
- create spec/greeter_spec.rb
172
+ create lib/snowboard_utah.rb
172
173
  create .rspec
173
- Juwelier has prepared your gem in ./greeter
174
+ Juwelier has prepared your gem in ./snowboard_utah
174
175
  Created greeter/.gitignore
175
176
  Created greeter/.ruby-version
176
177
  Created greeter/.ruby-gemset
@@ -179,17 +180,19 @@ Created greeter/LICENSE.txt
179
180
  Created greeter/Gemfile
180
181
  Created greeter/Rakefile
181
182
  Created greeter/app/greeter.rb
182
- Created greeter/app/views/greeter/app_view.rb
183
- Created greeter/package/windows/Greeter.ico
184
- Created greeter/package/macosx/Greeter.icns
185
- Created greeter/package/linux/Greeter.png
183
+ Created greeter/app/greeter/view/app_view.rb
184
+ Created greeter/package/windows/Snowboard Utah.ico
185
+ Created greeter/package/macosx/Snowboard Utah.icns
186
+ Created greeter/package/linux/Snowboard Utah.png
187
+ Created greeter/app/greeter/launch.rb
186
188
  Created greeter/bin/greeter
187
- Created greeter/spec/spec_helper.rb
188
189
  ...
189
190
  ```
190
191
 
191
192
  Eventually, it will launch an advanced "Hello, World!" app window having the title of your application ("Greeter").
192
193
 
194
+ (note: javapackager might claim at the end "Error: Bundler "DMG Installer" (dmg) failed to produce a bundle.", but it's a false negative since it works fully anyways)
195
+
193
196
  ![Glimmer Scaffold App](/images/glimmer-scaffolding-app.png)
194
197
 
195
198
  It also comes with a boilerplate Preferences dialog.
@@ -252,21 +255,6 @@ You should see output like the following:
252
255
 
253
256
  ```
254
257
  $ glimmer scaffold:desktopify[snowboard_utah,https://www.brightonresort.com]
255
- Fetching kamelcase-0.0.2.gem
256
- Fetching github_api-0.19.0.gem
257
- Fetching highline-2.0.3.gem
258
- Fetching juwelier-2.4.9.gem
259
- Fetching hashie-3.6.0.gem
260
- Fetching nokogiri-1.10.10-java.gem
261
- Fetching semver2-3.4.2.gem
262
- Successfully installed semver2-3.4.2
263
- Successfully installed kamelcase-0.0.2
264
- Successfully installed highline-2.0.3
265
- Successfully installed hashie-3.6.0
266
- Successfully installed github_api-0.19.0
267
- Successfully installed nokogiri-1.10.10-java
268
- Successfully installed juwelier-2.4.9
269
- 7 gems installed
270
258
  create .gitignore
271
259
  create Rakefile
272
260
  create Gemfile
@@ -285,16 +273,19 @@ Created snowboard_utah/LICENSE.txt
285
273
  Created snowboard_utah/Gemfile
286
274
  Created snowboard_utah/Rakefile
287
275
  Created snowboard_utah/app/snowboard_utah.rb
288
- Created snowboard_utah/app/views/snowboard_utah/app_view.rb
276
+ Created snowboard_utah/app/snowboard_utah/view/app_view.rb
289
277
  Created snowboard_utah/package/windows/Snowboard Utah.ico
290
278
  Created snowboard_utah/package/macosx/Snowboard Utah.icns
291
279
  Created snowboard_utah/package/linux/Snowboard Utah.png
280
+ Created snowboard_utah/app/snowboard_utah/launch.rb
292
281
  Created snowboard_utah/bin/snowboard_utah
293
282
  ...
294
283
  ```
295
284
 
296
285
  Eventually, it will launch a desktopified version of "https://www.brightonresort.com" having the title of ("Snowboard Utah").
297
286
 
287
+ (note: javapackager might claim at the end "Error: Bundler "DMG Installer" (dmg) failed to produce a bundle.", but it's a false negative since it works fully anyways)
288
+
298
289
  Desktopified App on Mac
299
290
 
300
291
  ![Glimmer Scaffold App](/images/glimmer-scaffolding-desktopify.png)
@@ -333,7 +324,7 @@ glimmer scaffold:cs[name]
333
324
 
334
325
  #### Custom Widget
335
326
 
336
- To scaffold a Glimmer [custom widget](#custom-widgets) (part of a view) for an existing Glimmer app, run the following command:
327
+ To scaffold a Glimmer [custom widget](GLIMMER_GUI_DSL_SYNTAX.md#custom-widgets) (part of a view) for an existing Glimmer app, run the following command:
337
328
 
338
329
  ```
339
330
  glimmer scaffold:customwidget[name]
@@ -345,6 +336,20 @@ Or the following alternative abbreviation:
345
336
  glimmer scaffold:cw[name]
346
337
  ```
347
338
 
339
+ #### Custom Shape
340
+
341
+ To scaffold a Glimmer [custom shape](GLIMMER_GUI_DSL_SYNTAX.md#custom-shapes) (a composite or customized shape) for an existing Glimmer app, run the following command:
342
+
343
+ ```
344
+ glimmer scaffold:customshape[name]
345
+ ```
346
+
347
+ Or the following alternative abbreviation:
348
+
349
+ ```
350
+ glimmer scaffold:cp[name]
351
+ ```
352
+
348
353
  #### Custom Shell Gem
349
354
 
350
355
  Custom shell gems are self-contained Glimmer apps as well as reusable [custom shells](#custom-shells).
@@ -382,7 +387,7 @@ Examples:
382
387
 
383
388
  #### Custom Widget Gem
384
389
 
385
- To scaffold a Glimmer [custom widget](#custom-widgets) gem (part of a view distributed as a Ruby gem), run the following command:
390
+ To scaffold a Glimmer [custom widget](GLIMMER_GUI_DSL_SYNTAX.md#custom-widgets) gem (part of a view distributed as a Ruby gem), run the following command:
386
391
 
387
392
  ```
388
393
  glimmer scaffold:gem:customwidget[name,namespace]
@@ -397,14 +402,40 @@ glimmer scaffold:gem:cw[name,namespace]
397
402
 
398
403
  It is important to specify a namespace to avoid having your gem clash with existing gems.
399
404
 
400
- The Ruby gem name will follow the convention "glimmer-cw-customwidgetname-namespace" (the 'cw' is for Custom Widget)
405
+ The Ruby gem name will follow the convention "glimmer-cw-customwidgetname-namespace" (the 'cw' is for Custom Widget; name words are not separated)
401
406
 
402
407
  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)
403
408
 
404
409
  Examples:
405
410
 
406
411
  - [glimmer-cw-video](https://github.com/AndyObtiva/glimmer-cw-video): Video Widget
407
- - [glimmer-cw-cdatetime-nebula](https://github.com/AndyObtiva/glimmer-cw-cdatetime-nebula): Nebula CDateTime Widget
412
+ - [glimmer-cw-nebula](https://github.com/AndyObtiva/glimmer-cw-nebula): The Nebula Project 50+ enterprise-grade high quality custom widgets for SWT
413
+ - [glimmer-cw-cdatetime-nebula](https://github.com/AndyObtiva/glimmer-cw-cdatetime-nebula): Nebula CDateTime Widget (piecemeal)
414
+
415
+ #### Custom Shape Gem
416
+
417
+ To scaffold a Glimmer [custom shape](GLIMMER_GUI_DSL_SYNTAX.md#custom-shapes) gem (part of a view distributed as a Ruby gem), run the following command:
418
+
419
+ ```
420
+ glimmer scaffold:gem:customshape[name,namespace]
421
+ ```
422
+
423
+ Or the following alternative abbreviation:
424
+
425
+ ```
426
+ glimmer scaffold:gem:cp[name,namespace]
427
+ ```
428
+
429
+
430
+ It is important to specify a namespace to avoid having your gem clash with existing gems.
431
+
432
+ The Ruby gem name will follow the convention "glimmer-cp-customshapename-namespace" (the 'cp' is for Custom Shape; name words are not separated)
433
+
434
+ Only official Glimmer gems created by the Glimmer project committers will have no namespace (e.g. [glimmer-cp-bevel](https://rubygems.org/gems/glimmer-cp-bevel) Ruby gem)
435
+
436
+ Examples:
437
+
438
+ - [glimmer-cp-bevel](https://github.com/AndyObtiva/glimmer-cp-bevel): Bevel
408
439
 
409
440
  ### Gem Listing
410
441
 
@@ -500,6 +531,39 @@ Output:
500
531
 
501
532
  ```
502
533
 
534
+ #### Listing Custom Shape Gems
535
+
536
+ The following command lists available Glimmer [Custom Shape Gems](#custom-shape-gem) (prefixed with "glimmer-cp-" by scaffolding convention) created by the the Glimmer community and published on [rubygems.org](http://www.rubygems.org):
537
+
538
+ ```
539
+ glimmer list:gems:customshape[query]
540
+ ```
541
+
542
+ Or the following alternative abbreviation:
543
+
544
+ ```
545
+ glimmer list:gems:cp[query]
546
+ ```
547
+
548
+ Example:
549
+
550
+ ```
551
+ glimmer list:gems:customshape
552
+ ```
553
+
554
+ Output:
555
+
556
+ ```
557
+
558
+ Glimmer Custom Shape Gems at rubygems.org:
559
+
560
+ Name Gem Version Author Description
561
+
562
+ Bevel glimmer-cp-bevel 0.1.1 Andy Maleh Bevel - Glimmer Custom Shape
563
+ Stickfigure glimmer-cp-stickfigure 0.1.1 Andy Maleh Stick Figure - Glimmer Custom Shape
564
+
565
+ ```
566
+
503
567
  #### Listing DSL Gems
504
568
 
505
569
  The following command lists available Glimmer [DSL Gems](#multi-dsl-support) (prefixed with "glimmer-dsl-" by convention) created by the the Glimmer community and published on [rubygems.org](http://www.rubygems.org):
@@ -554,6 +618,8 @@ Or, the following on Mac:
554
618
  jruby -J-XstartOnFirstThread -r glimmer-dsl-swt -S application.rb
555
619
  ```
556
620
 
621
+ Unless you ran `glimmer-setup`, which adds `JRUBY_OPTS` environment variable that includes the `-J-XstartOnFirstThread` option automatically so you would not have to specify manually.
622
+
557
623
  If you want to use a specific custom version of SWT, run the following on Windows/Linux:
558
624
 
559
625
  ```
@@ -163,7 +163,7 @@ Dynamic keywords are dynamically figured out from currently imported (aka requir
163
163
 
164
164
  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.
165
165
 
166
- For example, if a project adds this custom Java SWT library from the [Nebula Project](https://www.eclipse.org/nebula/):
166
+ For example, if a project adds this custom Java SWT library from the [Nebula Project](https://github.com/AndyObtiva/glimmer-cw-nebula):
167
167
 
168
168
  https://www.eclipse.org/nebula/widgets/gallery/gallery.php
169
169
 
@@ -284,9 +284,7 @@ shell {
284
284
 
285
285
  If you are new to Glimmer, you have learned enough to start running some [samples](#samples) directly or by reading through [Glimmer GUI DSL Keywords](#glimmer-gui-dsl-keywords) (which list each keyword's samples). Go ahead and run all Glimmer [samples](#samples), and come back to read the rest in any order you like since this material is more organized like a reference.
286
286
 
287
- If you are advanced and need more widgets, check out the [Nebula Project](https://www.eclipse.org/nebula/) for an extensive list of high quality custom widgets:
288
-
289
- https://www.eclipse.org/nebula/
287
+ If you are an advanced user of Glimmer DSL for SWT and need more widgets, check out the [Nebula Project](https://github.com/AndyObtiva/glimmer-cw-nebula) for an extensive list (50+) of high quality custom widgets.
290
288
 
291
289
  #### Glimmer GUI DSL Keywords
292
290
 
@@ -370,7 +368,7 @@ These proxy objects have an API and provide some convenience methods, some of wh
370
368
 
371
369
  Glimmer SWT proxies come with the instance method `#swt_widget`, which returns the actual SWT `Widget` object wrapped by the Glimmer widget proxy. It is useful in cases you'd like to do some custom SWT programming outside of Glimmer.
372
370
 
373
- ##### Shell widget proxy methods
371
+ ##### Shell Widget Proxy Methods
374
372
 
375
373
  Shell widget proxy has extra methods specific to SWT Shell:
376
374
  - `#open`: Opens the shell, making it visible and active, and starting the SWT Event Loop (you may learn more about it here: https://help.eclipse.org/2019-12/nftopic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Display.html). If shell was already open, but hidden, it makes the shell visible.
@@ -1042,6 +1040,10 @@ shell(:no_resize) {
1042
1040
  }
1043
1041
  ```
1044
1042
 
1043
+ ##### Fill Screen Window
1044
+
1045
+ SWT Shell can open and fill the screen with this style `swt(:fill_screen)`. This makes it have the size of the display, thus filling the screen. Keep in mind that this is different from being maximized (which is a special window state, not just filling the screen).
1046
+
1045
1047
  ### Widget Properties
1046
1048
 
1047
1049
  Widget properties such as text value, enablement, visibility, and layout details are set within the widget block using methods matching SWT widget property names in lower snakecase. You may refer to SWT widget guide for details on available widget properties:
@@ -1416,7 +1418,7 @@ Shape keywords and their args (including defaults) are listed below (they basica
1416
1418
  - `text(string, x, y, is_transparent = true)` text with optional is_transparent to indicate if background is transparent (default is true)
1417
1419
  - `text(string, x, y, flags)` text with optional flags (flag format is `swt(comma_separated_flags)` where flags can be `:draw_delimiter` (i.e. new lines), `:draw_tab`, `:draw_mnemonic`, and `:draw_transparent` as explained in [GC API](https://help.eclipse.org/2020-12/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/graphics/GC.html))
1418
1420
 
1419
- Shape keywords that can be filled with color can take a keyword argument `fill: true`. Defaults to false when not specified unless background is set with no foreground (or foreground is set with no background), in which case a smart default is applied.
1421
+ Shape keywords that can be filled with color can take a keyword argument `fill: true` (or `filled: true`). Defaults to false when not specified unless background is set with no foreground (or foreground is set with no background), in which case a smart default is applied.
1420
1422
  Smart defaults can be applied to automatically infer `gradient: true` (rectangle with both foreground and background) and `round: true` (rectangle with more than 4 args, the extra args are numeric) as well.
1421
1423
 
1422
1424
  Optionally, a shape keyword takes a block that can set any attributes from [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) (methods starting with `set`), which enable setting the `background` for filling and `foreground` for drawing.
@@ -3473,7 +3475,7 @@ shell { |app_shell|
3473
3475
  }.open
3474
3476
  ```
3475
3477
 
3476
- 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`)
3478
+ 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`)
3477
3479
 
3478
3480
  You may check out [Hello, Custom Shell!](GLIMMER_SAMPLES.md#hello-custom-shell) for another example.
3479
3481
 
@@ -20,6 +20,12 @@ You may choose to generate a specific type of packaging instead by addionally pa
20
20
  glimmer package[msi]
21
21
  ```
22
22
 
23
+ Make sure to surround with double-quotes when running from ZShell (zsh):
24
+
25
+ ```
26
+ glimmer "package[msi]"
27
+ ```
28
+
23
29
  - Available Mac packaging types are `dmg`, `pkg`, and `image` (image means a pure Mac `app` without a setup program). Keep in mind that the packages you produce are compatible with the same MacOS you are on or older.
24
30
  - Available Windows packaging types are `msi`, `exe`, and `image` (image means a Windows application directory without a setup program). Learn more about Windows packaging are [over here](#windows-application-packaging).
25
31
 
@@ -190,7 +196,7 @@ Currently, `Glimmer::RakeTask::Package.javapackager_extra_args` is only honored
190
196
  You can get around that in zsh by running glimmer package commands with `bash -c` prefix:
191
197
 
192
198
  ```
193
- bash -c 'glimmer package'
199
+ bash -c 'source ~/.glimmer_source; glimmer package'
194
200
  ```
195
201
 
196
202
  4. Java on Windows System PATH
@@ -2,7 +2,9 @@
2
2
  - [Hello Samples](#hello-samples)
3
3
  - [Hello, World!](#hello-world)
4
4
  - [Hello, Tab!](#hello-tab)
5
+ - [Hello, C Tab!](#hello-c-tab)
5
6
  - [Hello, Combo!](#hello-combo)
7
+ - [Hello, C Combo!](#hello-c-combo)
6
8
  - [Hello, List Single Selection!](#hello-list-single-selection)
7
9
  - [Hello, List Multi Selection!](#hello-list-multi-selection)
8
10
  - [Hello, Computed!](#hello-computed)
@@ -101,6 +103,18 @@ Code:
101
103
  ![Hello Tab English](/images/glimmer-hello-tab-english.png)
102
104
  ![Hello Tab French](/images/glimmer-hello-tab-french.png)
103
105
 
106
+ #### Hello, C Tab!
107
+
108
+ This sample demonstrates custom tab widget usage (`c_tab_folder` and `c_tab_item`), which supports more customizations to tab fonts/background/foreground colors and display of extra additional tabs via a drop down.
109
+
110
+ Code:
111
+
112
+ [samples/hello/hello_c_tab.rb](/samples/hello/hello_c_tab.rb)
113
+
114
+ ![Hello C Tab](/images/glimmer-hello-c-tab.png)
115
+ ![Hello C Tab Extra Tabs](/images/glimmer-hello-c-tab-extra-tabs.png)
116
+ ![Hello C Tab Other Tab](/images/glimmer-hello-c-tab-other-tab.png)
117
+
104
118
  #### Hello, Combo!
105
119
 
106
120
  This sample demonstrates combo data-binding.
@@ -112,6 +126,17 @@ Code:
112
126
  ![Hello Combo](/images/glimmer-hello-combo.png)
113
127
  ![Hello Combo Expanded](/images/glimmer-hello-combo-expanded.png)
114
128
 
129
+ #### Hello, C Combo!
130
+
131
+ This sample demonstrates the custom combo variation on combo, which allows the adjustment of the combo height based on font height or layout data.
132
+
133
+ Code:
134
+
135
+ [samples/hello/hello_c_combo.rb](/samples/hello/hello_c_combo.rb)
136
+
137
+ ![Hello Combo](/images/glimmer-hello-c-combo.png)
138
+ ![Hello Combo Expanded](/images/glimmer-hello-c-combo-expanded.png)
139
+
115
140
  #### Hello, List Single Selection!
116
141
 
117
142
  This sample demonstrates list single-selection data-binding.
Binary file
@@ -42,3 +42,11 @@ require 'facets/hash/symbolize_keys'
42
42
  require 'ext/glimmer/config'
43
43
  require 'ext/glimmer'
44
44
  require 'glimmer/dsl/swt/dsl'
45
+
46
+ if defined?(::IRB)
47
+ begin
48
+ Kernel.send(:remove_method, :y)
49
+ rescue
50
+ # No Op
51
+ end
52
+ end
@@ -53,7 +53,7 @@ module Glimmer
53
53
  return
54
54
  end
55
55
  # need the rescue false for a scenario with tree items not being equal to model objects raising an exception
56
- unless ((value == evaluate_property) rescue false) # need the rescue false for a scenario with tree items not being equal to model objects raising an exception
56
+ if @async_exec || !((value == evaluate_property) rescue false) # need the rescue false for a scenario with tree items not being equal to model objects raising an exception
57
57
  @widget.set_attribute(@property, value)
58
58
  end
59
59
  end
@@ -0,0 +1,58 @@
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'
23
+ require 'glimmer/dsl/static_expression'
24
+ require 'glimmer/dsl/parent_expression'
25
+ require 'glimmer/swt/widget_proxy'
26
+ require 'glimmer/swt/c_tab_item_proxy'
27
+
28
+ module Glimmer
29
+ module DSL
30
+ module SWT
31
+ class CTabItemExpression < StaticExpression
32
+ include ParentExpression
33
+
34
+ include_package 'org.eclipse.swt.custom'
35
+
36
+ def can_interpret?(parent, keyword, *args, &block)
37
+ initial_condition = (keyword == 'c_tab_item') and parent.respond_to?(:swt_widget)
38
+ if initial_condition
39
+ if parent.swt_widget.is_a?(CTabFolder)
40
+ return true
41
+ else
42
+ Glimmer::Config.logger.error {"c_tab_item widget may only be used directly under a c_tab_folder widget!"}
43
+ end
44
+ end
45
+ false
46
+ end
47
+
48
+ def interpret(parent, keyword, *args, &block)
49
+ Glimmer::SWT::CTabItemProxy.new(parent, args)
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end