glimmer-dsl-swt 4.17.3.0 → 4.17.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +126 -454
- data/VERSION +1 -1
- data/glimmer-dsl-swt.gemspec +9 -6
- data/lib/glimmer-dsl-swt.rb +1 -0
- data/lib/glimmer/dsl/swt/custom_widget_expression.rb +1 -0
- data/lib/glimmer/dsl/swt/widget_expression.rb +1 -0
- data/lib/glimmer/rake_task.rb +4 -21
- data/lib/glimmer/swt/custom/code_text.rb +88 -0
- data/lib/glimmer/swt/message_box_proxy.rb +1 -1
- data/lib/glimmer/swt/sash_form_proxy.rb +53 -0
- data/lib/glimmer/swt/widget_proxy.rb +1 -1
- data/samples/elaborate/meta_sample.rb +166 -0
- data/samples/hello/hello_sash_form.rb +137 -0
- metadata +11 -8
- data/lib/glimmer/rake_task/sample.rb +0 -115
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0d8d95c12f301621467ded0dd2abb7b1c055ce22594e5a93e744d4bcfe84e1d4
         | 
| 4 | 
            +
              data.tar.gz: 7458a6dec1a2700e9005c11eddf7e42c9585b54bb10a18efbd8273a969c2906a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c1595178259263a3d6127035a0917f4e350316f4dd7af6cdc8def67cb0e5f39ed63da8ed3b76a978db6a1b95fe88da413640ed96117f69b55d5596b3f8031b42
         | 
| 7 | 
            +
              data.tar.gz: e42731662e6757942c3eb7db9ca33e6f45c6990eb37b170dc851c3773a2b7bce8aa9a2a42b52cf961be8937682663104ce6f5298852b263fd0f367025df4dc31
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,16 @@ | |
| 1 1 | 
             
            # Change Log
         | 
| 2 2 |  | 
| 3 | 
            +
            ### 4.17.4.0
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            - Glimmer sample app to launch samples (sample of samples meta-sample)
         | 
| 6 | 
            +
            - Syntax Color Highlighting in meta-sample
         | 
| 7 | 
            +
            - Make sash_form weights accept splat array elements (not wrapped in [])
         | 
| 8 | 
            +
            - Make sash_form weights not get set till the closing of the sash_form (to allow putting it above content instead of below as originally required by SWT)
         | 
| 9 | 
            +
            - Replace dependency on tty-markdown gem with dependency on rouge gem instead
         | 
| 10 | 
            +
            - Remove rake tasks `sample:list`, `sample:code` and `sample:run`
         | 
| 11 | 
            +
            - Add rake task `samples` to point to the new Glimmer Meta-Sample
         | 
| 12 | 
            +
            - Have meta-sample load samples from gems
         | 
| 13 | 
            +
             | 
| 3 14 | 
             
            ### 4.17.3.0
         | 
| 4 15 |  | 
| 5 16 | 
             
            - `glimmer scaffold:desktopify[appname,website]` Mac
         | 
| @@ -18,6 +29,7 @@ | |
| 18 29 |  | 
| 19 30 | 
             
            - New `glimmer run` glimmer command task.
         | 
| 20 31 | 
             
            - Add built in support for handling jar file paths like that in ImageProxy code processing "uri:classloader" path
         | 
| 32 | 
            +
            - Document that gif background_image only works without on_top and no_trim styles in Windows
         | 
| 21 33 | 
             
            - Give a good error message when Git is not properly setup for Glimmer Scaffolding
         | 
| 22 34 | 
             
            - Give an error message when attempting to scaffold over an already scaffolded directory
         | 
| 23 35 | 
             
            - Fix issue on Windows regarding use of the new EXPERIMENTAL Animated gif support in the `composite#background_image` property
         | 
    
        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.4.0
         | 
| 2 2 | 
             
            ## JRuby Desktop Development GUI Library
         | 
| 3 3 | 
             
            [](http://badge.fury.io/rb/glimmer-dsl-swt)
         | 
| 4 4 | 
             
            [](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
         | 
| @@ -40,9 +40,10 @@ shell { | |
| 40 40 | 
             
            }.open
         | 
| 41 41 | 
             
            ```
         | 
| 42 42 |  | 
| 43 | 
            -
            Run:
         | 
| 43 | 
            +
            Run via `glimmer samples` or directly:
         | 
| 44 | 
            +
             | 
| 44 45 | 
             
            ```
         | 
| 45 | 
            -
            glimmer  | 
| 46 | 
            +
            glimmer samples/hello/hello_world.rb
         | 
| 46 47 | 
             
            ```
         | 
| 47 48 |  | 
| 48 49 | 
             
            Glimmer app:
         | 
| @@ -85,10 +86,10 @@ Glimmer code (from [samples/elaborate/tic_tac_toe.rb](https://github.com/AndyObt | |
| 85 86 | 
             
            # ...
         | 
| 86 87 | 
             
            ```
         | 
| 87 88 |  | 
| 88 | 
            -
            Run:
         | 
| 89 | 
            +
            Run via `glimmer samples` or directly:
         | 
| 89 90 |  | 
| 90 91 | 
             
            ```
         | 
| 91 | 
            -
            glimmer  | 
| 92 | 
            +
            glimmer samples/elaborate/tic_tac_toe.rb
         | 
| 92 93 | 
             
            ```
         | 
| 93 94 |  | 
| 94 95 | 
             
            Glimmer app:
         | 
| @@ -210,10 +211,10 @@ Glimmer code (from [samples/elaborate/contact_manager.rb](https://github.com/And | |
| 210 211 | 
             
            # ...
         | 
| 211 212 | 
             
            ```
         | 
| 212 213 |  | 
| 213 | 
            -
            Run:
         | 
| 214 | 
            +
            Run via `glimmer samples` or directly:
         | 
| 214 215 |  | 
| 215 216 | 
             
            ```
         | 
| 216 | 
            -
            glimmer  | 
| 217 | 
            +
            glimmer samples/elaborate/contact_manager.rb
         | 
| 217 218 | 
             
            ```
         | 
| 218 219 |  | 
| 219 220 | 
             
            Glimmer App:
         | 
| @@ -248,12 +249,10 @@ Glimmer App: | |
| 248 249 | 
             
              - [Glimmer Command](#glimmer-command)
         | 
| 249 250 | 
             
                - [Basic Usage](#basic-usage)
         | 
| 250 251 | 
             
                - [Advanced Usage](#advanced-usage)
         | 
| 251 | 
            -
                - [ | 
| 252 | 
            -
                  - [Sample List](#sample-list)
         | 
| 253 | 
            -
                  - [Sample Run](#sample-run)
         | 
| 254 | 
            -
                  - [Sample Code](#sample-code)
         | 
| 252 | 
            +
                - [Samples](#samples)
         | 
| 255 253 | 
             
                - [Scaffolding](#scaffolding)
         | 
| 256 254 | 
             
                  - [App](#app)
         | 
| 255 | 
            +
                  - [Desktopify](#desktopify)
         | 
| 257 256 | 
             
                  - [Custom Shell](#custom-shell)
         | 
| 258 257 | 
             
                  - [Custom Widget](#custom-widget)
         | 
| 259 258 | 
             
                  - [Custom Shell Gem](#custom-shell-gem)
         | 
| @@ -309,7 +308,9 @@ Glimmer App: | |
| 309 308 | 
             
                  - [Multi-DSL Support](#multi-dsl-support)
         | 
| 310 309 | 
             
                  - [Application Menu Items (About/Preferences)](#application-menu-items-aboutpreferences)
         | 
| 311 310 | 
             
                  - [App Name and Version](#app-name-and-version)
         | 
| 311 | 
            +
                  - [Code Text Widget](#code-text-widget)
         | 
| 312 312 | 
             
                  - [Video Widget](#video-widget)
         | 
| 313 | 
            +
                  - [Sash Form Widget](#sash-form-widget)
         | 
| 313 314 | 
             
                  - [Browser Widget](#browser-widget)
         | 
| 314 315 | 
             
              - [Glimmer Configuration](#glimmer-configuration)
         | 
| 315 316 | 
             
                - [logger](#logger)
         | 
| @@ -338,6 +339,7 @@ Glimmer App: | |
| 338 339 | 
             
                  - [Hello, Pop Up Context Menu!](#hello-pop-up-context-menu)
         | 
| 339 340 | 
             
                  - [Hello, Custom Widget!](#hello-custom-widget)
         | 
| 340 341 | 
             
                  - [Hello, Custom Shell!](#hello-custom-shell)
         | 
| 342 | 
            +
                  - [Hello, Sash Form!](#hello-sash-form)
         | 
| 341 343 | 
             
                - [Elaborate Samples](#elaborate-samples)
         | 
| 342 344 | 
             
                  - [User Profile](#user-profile)
         | 
| 343 345 | 
             
                  - [Login](#login)
         | 
| @@ -373,7 +375,7 @@ Glimmer App: | |
| 373 375 | 
             
              - [Contributors](#contributors)
         | 
| 374 376 | 
             
              - [Hire Me](#hire-me)
         | 
| 375 377 | 
             
              - [License](#license)
         | 
| 376 | 
            -
             | 
| 378 | 
            +
              
         | 
| 377 379 | 
             
            ## Background
         | 
| 378 380 |  | 
| 379 381 | 
             
            Ruby 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 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, JFace, and RCP can help fill the gap of desktop application development with Ruby.
         | 
| @@ -431,7 +433,7 @@ jgem install glimmer-dsl-swt | |
| 431 433 |  | 
| 432 434 | 
             
            Or this command if you want a specific version:
         | 
| 433 435 | 
             
            ```
         | 
| 434 | 
            -
            jgem install glimmer-dsl-swt -v 4.17. | 
| 436 | 
            +
            jgem install glimmer-dsl-swt -v 4.17.4.0
         | 
| 435 437 | 
             
            ```
         | 
| 436 438 |  | 
| 437 439 | 
             
            Note: 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.
         | 
| @@ -490,17 +492,18 @@ glimmer application.rb | |
| 490 492 | 
             
            Runs a Glimmer application using JRuby, automatically preloading
         | 
| 491 493 | 
             
            the glimmer ruby gem and SWT jar dependency.
         | 
| 492 494 |  | 
| 493 | 
            -
             | 
| 495 | 
            +
            Run Glimmer samples with:
         | 
| 496 | 
            +
             | 
| 494 497 | 
             
            ```
         | 
| 495 | 
            -
            glimmer  | 
| 498 | 
            +
            glimmer samples
         | 
| 496 499 | 
             
            ```
         | 
| 497 | 
            -
            This  | 
| 500 | 
            +
            This brings up the [Glimmer Meta-Sample (The Sample of Samples)](#samples)
         | 
| 498 501 |  | 
| 499 | 
            -
            If you cloned this project locally | 
| 502 | 
            +
            If you cloned this project locally instead of installing the gem, run `bin/glimmer` instead.
         | 
| 500 503 |  | 
| 501 504 | 
             
            Example:
         | 
| 502 505 | 
             
            ```
         | 
| 503 | 
            -
            bin/glimmer  | 
| 506 | 
            +
            bin/glimmer samples
         | 
| 504 507 | 
             
            ```
         | 
| 505 508 |  | 
| 506 509 | 
             
            ### Advanced Usage
         | 
| @@ -508,7 +511,7 @@ bin/glimmer sample:run[hello_world] | |
| 508 511 | 
             
            Below are the full usage instructions that come up when running `glimmer` without args.
         | 
| 509 512 |  | 
| 510 513 | 
             
            ```
         | 
| 511 | 
            -
            Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v4.17. | 
| 514 | 
            +
            Glimmer (Ruby Desktop Development GUI Library) - JRuby Gem: glimmer-dsl-swt v4.17.4.0
         | 
| 512 515 |  | 
| 513 516 | 
             
            Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
         | 
| 514 517 |  | 
| @@ -542,9 +545,7 @@ Select a Glimmer task to run: (Press ↑/↓ arrow to move, Enter to select and | |
| 542 545 | 
             
              glimmer package:lock_jars                                  # Lock JARs
         | 
| 543 546 | 
             
              glimmer package:native[type]                               # Generate Native files
         | 
| 544 547 | 
             
              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)  
         | 
| 545 | 
            -
              glimmer  | 
| 546 | 
            -
              glimmer sample:list[query]                                 # Lists Glimmer internal samples [included in gem]. Filters by query if specified (query is optional)
         | 
| 547 | 
            -
              glimmer sample:run[name]                                   # Runs a Glimmer internal sample [included in gem]. If no name is supplied, it runs all samples
         | 
| 548 | 
            +
              glimmer samples                                            # Brings up the Glimmer Meta-Sample app to allow browsing, running, and viewing code of Glimmer samples
         | 
| 548 549 | 
             
              glimmer scaffold[app_name]                                 # Scaffold Glimmer application directory structure to build a new app
         | 
| 549 550 | 
             
              glimmer scaffold:customshell[name,namespace]               # Scaffold Glimmer::UI::CustomShell subclass (full window view) under app/views (namespace is optional) [alt: scaffold:cs]
         | 
| 550 551 | 
             
              glimmer scaffold:customwidget[name,namespace]              # Scaffold Glimmer::UI::CustomWidget subclass (part of a view) under app/views (namespace is optional) [alt: scaffold:cw]
         | 
| @@ -566,333 +567,17 @@ glimmer samples/hello/hello_world.rb samples/hello/hello_tab.rb | |
| 566 567 |  | 
| 567 568 | 
             
            Launches samples/hello/hello_world.rb and samples/hello_tab.rb at the same time, each in a separate JRuby thread.
         | 
| 568 569 |  | 
| 569 | 
            -
            ###  | 
| 570 | 
            -
             | 
| 571 | 
            -
            #### Sample List
         | 
| 570 | 
            +
            ### Glimmer Samples
         | 
| 572 571 |  | 
| 573 572 | 
             
            You can list available Glimmer samples by running:
         | 
| 574 573 |  | 
| 575 574 | 
             
            ```
         | 
| 576 | 
            -
            glimmer  | 
| 577 | 
            -
            ```
         | 
| 578 | 
            -
             | 
| 579 | 
            -
            This should output the following (providing the name of each sample, description, and command to run the sample and view its code):
         | 
| 580 | 
            -
             | 
| 581 | 
            -
            ```
         | 
| 582 | 
            -
            $ glimmer sample:list
         | 
| 583 | 
            -
             | 
| 584 | 
            -
              Glimmer Hello Samples:
         | 
| 585 | 
            -
                                                                                                                           
         | 
| 586 | 
            -
                         Name                       Description                                 Run                        
         | 
| 587 | 
            -
                                                                                                                           
         | 
| 588 | 
            -
              hello_browser                 Hello Browser                 glimmer sample:run[hello_browser]                
         | 
| 589 | 
            -
              hello_combo                   Hello Combo                   glimmer sample:run[hello_combo]                  
         | 
| 590 | 
            -
              hello_computed                Hello Computed                glimmer sample:run[hello_computed]               
         | 
| 591 | 
            -
              hello_drag_and_drop           Hello Drag And Drop           glimmer sample:run[hello_drag_and_drop]          
         | 
| 592 | 
            -
              hello_list_multi_selection    Hello List Multi Selection    glimmer sample:run[hello_list_multi_selection]   
         | 
| 593 | 
            -
              hello_list_single_selection   Hello List Single Selection   glimmer sample:run[hello_list_single_selection]  
         | 
| 594 | 
            -
              hello_menu_bar                Hello Menu Bar                glimmer sample:run[hello_menu_bar]               
         | 
| 595 | 
            -
              hello_message_box             Hello Message Box             glimmer sample:run[hello_message_box]            
         | 
| 596 | 
            -
              hello_pop_up_context_menu     Hello Pop Up Context Menu     glimmer sample:run[hello_pop_up_context_menu]    
         | 
| 597 | 
            -
              hello_tab                     Hello Tab                     glimmer sample:run[hello_tab]                    
         | 
| 598 | 
            -
              hello_world                   Hello World                   glimmer sample:run[hello_world]                  
         | 
| 599 | 
            -
                                                                                                                           
         | 
| 600 | 
            -
             | 
| 601 | 
            -
              Glimmer Elaborate Samples:
         | 
| 602 | 
            -
                                                                                       
         | 
| 603 | 
            -
                   Name           Description                     Run                  
         | 
| 604 | 
            -
                                                                                       
         | 
| 605 | 
            -
              contact_manager   Contact Manager   glimmer sample:run[contact_manager]  
         | 
| 606 | 
            -
              login             Login             glimmer sample:run[login]            
         | 
| 607 | 
            -
              tic_tac_toe       Tic Tac Toe       glimmer sample:run[tic_tac_toe]                                                   
         | 
| 608 | 
            -
              user_profile      User Profile      glimmer sample:run[user_profile]                                                   
         | 
| 575 | 
            +
            glimmer samples
         | 
| 609 576 | 
             
            ```
         | 
| 610 577 |  | 
| 611 | 
            -
             | 
| 612 | 
            -
             | 
| 613 | 
            -
            A sample may be run via `glimmer sample:run[name]`. This also outputs the sample code so that you could take a look at it and compare to the GUI that launches. 
         | 
| 614 | 
            -
             | 
| 615 | 
            -
            If the sample name is left empty (e.g. `glimmer sample:run`), then all samples are run.
         | 
| 578 | 
            +
            This brings up the [Glimmer Meta-Sample (The Sample of Samples)](#samples):
         | 
| 616 579 |  | 
| 617 | 
            -
             | 
| 618 | 
            -
             | 
| 619 | 
            -
            ```
         | 
| 620 | 
            -
            glimmer sample:run[hello_tab]
         | 
| 621 | 
            -
            ```
         | 
| 622 | 
            -
             | 
| 623 | 
            -
            This will run the hello_tab sample and output its code:
         | 
| 624 | 
            -
             | 
| 625 | 
            -
            ```
         | 
| 626 | 
            -
            $ glimmer sample:run[hello_tab] 
         | 
| 627 | 
            -
             | 
| 628 | 
            -
            # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.3.0/samples/hello/hello_tab.rb
         | 
| 629 | 
            -
             | 
| 630 | 
            -
            class HelloTab
         | 
| 631 | 
            -
              include Glimmer
         | 
| 632 | 
            -
              def launch
         | 
| 633 | 
            -
                shell {
         | 
| 634 | 
            -
                  text "Hello, Tab!"
         | 
| 635 | 
            -
                  tab_folder {
         | 
| 636 | 
            -
                    tab_item {
         | 
| 637 | 
            -
                      text "English"
         | 
| 638 | 
            -
                      label {
         | 
| 639 | 
            -
                        text "Hello, World!"
         | 
| 640 | 
            -
                      }
         | 
| 641 | 
            -
                    }
         | 
| 642 | 
            -
                    tab_item {
         | 
| 643 | 
            -
                      text "French"
         | 
| 644 | 
            -
                      label {
         | 
| 645 | 
            -
                        text "Bonjour, Univers!"
         | 
| 646 | 
            -
                      }
         | 
| 647 | 
            -
                    }
         | 
| 648 | 
            -
                  }
         | 
| 649 | 
            -
                }.open
         | 
| 650 | 
            -
              end
         | 
| 651 | 
            -
            end
         | 
| 652 | 
            -
             | 
| 653 | 
            -
            HelloTab.new.launch
         | 
| 654 | 
            -
             | 
| 655 | 
            -
            # # #
         | 
| 656 | 
            -
            ```
         | 
| 657 | 
            -
             | 
| 658 | 
            -
            
         | 
| 659 | 
            -
             | 
| 660 | 
            -
            #### Sample Code
         | 
| 661 | 
            -
             | 
| 662 | 
            -
            You may output any sample code via this command: `glimmer sample:code[name]`
         | 
| 663 | 
            -
             | 
| 664 | 
            -
            This is very similar to the sample run command, except the name is required.
         | 
| 665 | 
            -
             | 
| 666 | 
            -
            It will not only output the main sample file, but any required supporting files as well.
         | 
| 667 | 
            -
             | 
| 668 | 
            -
            Example:
         | 
| 669 | 
            -
             | 
| 670 | 
            -
            ```
         | 
| 671 | 
            -
            $ glimmer sample:code[tic_tac_toe] 
         | 
| 672 | 
            -
             | 
| 673 | 
            -
            # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.3.0/samples/elaborate/tic_tac_toe.rb
         | 
| 674 | 
            -
             | 
| 675 | 
            -
            require_relative "tic_tac_toe/board"
         | 
| 676 | 
            -
             | 
| 677 | 
            -
            class TicTacToe
         | 
| 678 | 
            -
              include Glimmer
         | 
| 679 | 
            -
             | 
| 680 | 
            -
              def initialize
         | 
| 681 | 
            -
                @tic_tac_toe_board = Board.new
         | 
| 682 | 
            -
                @shell = shell {
         | 
| 683 | 
            -
                  text "Tic-Tac-Toe"
         | 
| 684 | 
            -
                  minimum_size 150, 178
         | 
| 685 | 
            -
                  composite {
         | 
| 686 | 
            -
                    grid_layout 3, true
         | 
| 687 | 
            -
                    (1..3).each { |row|
         | 
| 688 | 
            -
                      (1..3).each { |column|
         | 
| 689 | 
            -
                        button {
         | 
| 690 | 
            -
                          layout_data :fill, :fill, true, true
         | 
| 691 | 
            -
                          text        bind(@tic_tac_toe_board[row, column], :sign)
         | 
| 692 | 
            -
                          enabled     bind(@tic_tac_toe_board[row, column], :empty)
         | 
| 693 | 
            -
                          font        style: :bold, height: 20
         | 
| 694 | 
            -
                          on_widget_selected {
         | 
| 695 | 
            -
                            @tic_tac_toe_board.mark(row, column)
         | 
| 696 | 
            -
                          }
         | 
| 697 | 
            -
                        }
         | 
| 698 | 
            -
                      }
         | 
| 699 | 
            -
                    }
         | 
| 700 | 
            -
                  }
         | 
| 701 | 
            -
                }
         | 
| 702 | 
            -
                observe(@tic_tac_toe_board, :game_status) { |game_status|
         | 
| 703 | 
            -
                  display_win_message if game_status == Board::WIN
         | 
| 704 | 
            -
                  display_draw_message if game_status == Board::DRAW
         | 
| 705 | 
            -
                }
         | 
| 706 | 
            -
              end
         | 
| 707 | 
            -
             | 
| 708 | 
            -
              def display_win_message
         | 
| 709 | 
            -
                display_game_over_message("Player #{@tic_tac_toe_board.winning_sign} has won!")
         | 
| 710 | 
            -
              end
         | 
| 711 | 
            -
             | 
| 712 | 
            -
              def display_draw_message
         | 
| 713 | 
            -
                display_game_over_message("Draw!")
         | 
| 714 | 
            -
              end
         | 
| 715 | 
            -
             | 
| 716 | 
            -
              def display_game_over_message(message_text)
         | 
| 717 | 
            -
                message_box(@shell) {
         | 
| 718 | 
            -
                  text 'Game Over'
         | 
| 719 | 
            -
                  message message_text
         | 
| 720 | 
            -
                }.open
         | 
| 721 | 
            -
                @tic_tac_toe_board.reset
         | 
| 722 | 
            -
              end
         | 
| 723 | 
            -
             | 
| 724 | 
            -
              def open
         | 
| 725 | 
            -
                @shell.open
         | 
| 726 | 
            -
              end
         | 
| 727 | 
            -
            end
         | 
| 728 | 
            -
             | 
| 729 | 
            -
            TicTacToe.new.open
         | 
| 730 | 
            -
             | 
| 731 | 
            -
            # # #
         | 
| 732 | 
            -
             | 
| 733 | 
            -
             | 
| 734 | 
            -
            # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.3.0/samples/elaborate/tic_tac_toe/cell.rb
         | 
| 735 | 
            -
             | 
| 736 | 
            -
            class TicTacToe
         | 
| 737 | 
            -
              class Cell
         | 
| 738 | 
            -
                EMPTY = ""
         | 
| 739 | 
            -
                attr_accessor :sign, :empty
         | 
| 740 | 
            -
              
         | 
| 741 | 
            -
                def initialize
         | 
| 742 | 
            -
                  reset
         | 
| 743 | 
            -
                end
         | 
| 744 | 
            -
              
         | 
| 745 | 
            -
                def mark(sign)
         | 
| 746 | 
            -
                  self.sign = sign
         | 
| 747 | 
            -
                end
         | 
| 748 | 
            -
              
         | 
| 749 | 
            -
                def reset
         | 
| 750 | 
            -
                  self.sign = EMPTY
         | 
| 751 | 
            -
                end
         | 
| 752 | 
            -
              
         | 
| 753 | 
            -
                def sign=(sign_symbol)
         | 
| 754 | 
            -
                  @sign = sign_symbol
         | 
| 755 | 
            -
                  self.empty = sign == EMPTY
         | 
| 756 | 
            -
                end
         | 
| 757 | 
            -
              
         | 
| 758 | 
            -
                def marked
         | 
| 759 | 
            -
                  !empty
         | 
| 760 | 
            -
                end
         | 
| 761 | 
            -
              end
         | 
| 762 | 
            -
            end
         | 
| 763 | 
            -
             | 
| 764 | 
            -
            # # #
         | 
| 765 | 
            -
             | 
| 766 | 
            -
             | 
| 767 | 
            -
            # /Users/User/.rvm/gems/jruby-9.2.13.0@glimmerapp/gems/glimmer-dsl-swt-4.17.3.0/samples/elaborate/tic_tac_toe/board.rb
         | 
| 768 | 
            -
             | 
| 769 | 
            -
            require_relative 'cell'
         | 
| 770 | 
            -
             | 
| 771 | 
            -
            class TicTacToe
         | 
| 772 | 
            -
              class Board
         | 
| 773 | 
            -
                DRAW = :draw
         | 
| 774 | 
            -
                IN_PROGRESS = :in_progress
         | 
| 775 | 
            -
                WIN = :win
         | 
| 776 | 
            -
                attr :winning_sign
         | 
| 777 | 
            -
                attr_accessor :game_status
         | 
| 778 | 
            -
              
         | 
| 779 | 
            -
                def initialize
         | 
| 780 | 
            -
                  @sign_state_machine = {nil => "X", "X" => "O", "O" => "X"}
         | 
| 781 | 
            -
                  build_grid
         | 
| 782 | 
            -
                  @winning_sign = Cell::EMPTY
         | 
| 783 | 
            -
                  @game_status = IN_PROGRESS
         | 
| 784 | 
            -
                end
         | 
| 785 | 
            -
              
         | 
| 786 | 
            -
                #row and column numbers are 1-based
         | 
| 787 | 
            -
                def mark(row, column)
         | 
| 788 | 
            -
                  self[row, column].mark(current_sign)
         | 
| 789 | 
            -
                  game_over? #updates winning sign
         | 
| 790 | 
            -
                end
         | 
| 791 | 
            -
              
         | 
| 792 | 
            -
                def current_sign
         | 
| 793 | 
            -
                  @current_sign = @sign_state_machine[@current_sign]
         | 
| 794 | 
            -
                end
         | 
| 795 | 
            -
              
         | 
| 796 | 
            -
                def [](row, column)
         | 
| 797 | 
            -
                  @grid[row-1][column-1]
         | 
| 798 | 
            -
                end
         | 
| 799 | 
            -
              
         | 
| 800 | 
            -
                def game_over?
         | 
| 801 | 
            -
                   win? or draw?
         | 
| 802 | 
            -
                end
         | 
| 803 | 
            -
              
         | 
| 804 | 
            -
                def win?
         | 
| 805 | 
            -
                  win = (row_win? or column_win? or diagonal_win?)
         | 
| 806 | 
            -
                  self.game_status=WIN if win
         | 
| 807 | 
            -
                  win
         | 
| 808 | 
            -
                end
         | 
| 809 | 
            -
              
         | 
| 810 | 
            -
                def reset
         | 
| 811 | 
            -
                  (1..3).each do |row|
         | 
| 812 | 
            -
                    (1..3).each do |column|
         | 
| 813 | 
            -
                      self[row, column].reset
         | 
| 814 | 
            -
                    end
         | 
| 815 | 
            -
                  end
         | 
| 816 | 
            -
                  @winning_sign = Cell::EMPTY
         | 
| 817 | 
            -
                  @current_sign = nil
         | 
| 818 | 
            -
                  self.game_status=IN_PROGRESS
         | 
| 819 | 
            -
                end
         | 
| 820 | 
            -
              
         | 
| 821 | 
            -
                private
         | 
| 822 | 
            -
              
         | 
| 823 | 
            -
                def build_grid
         | 
| 824 | 
            -
                  @grid = []
         | 
| 825 | 
            -
                  3.times do |row_index| #0-based
         | 
| 826 | 
            -
                    @grid << []
         | 
| 827 | 
            -
                    3.times { @grid[row_index] << Cell.new }
         | 
| 828 | 
            -
                  end
         | 
| 829 | 
            -
                end
         | 
| 830 | 
            -
              
         | 
| 831 | 
            -
                def row_win?
         | 
| 832 | 
            -
                  (1..3).each do |row|
         | 
| 833 | 
            -
                    if row_has_same_sign(row)
         | 
| 834 | 
            -
                      @winning_sign = self[row, 1].sign
         | 
| 835 | 
            -
                      return true
         | 
| 836 | 
            -
                    end
         | 
| 837 | 
            -
                  end
         | 
| 838 | 
            -
                  false
         | 
| 839 | 
            -
                end
         | 
| 840 | 
            -
              
         | 
| 841 | 
            -
                def column_win?
         | 
| 842 | 
            -
                  (1..3).each do |column|
         | 
| 843 | 
            -
                    if column_has_same_sign(column)
         | 
| 844 | 
            -
                      @winning_sign = self[1, column].sign
         | 
| 845 | 
            -
                      return true
         | 
| 846 | 
            -
                    end
         | 
| 847 | 
            -
                  end
         | 
| 848 | 
            -
                  false
         | 
| 849 | 
            -
                end
         | 
| 850 | 
            -
              
         | 
| 851 | 
            -
                #needs refactoring if we ever decide to make the board size dynamic
         | 
| 852 | 
            -
                def diagonal_win?
         | 
| 853 | 
            -
                  if (self[1, 1].sign == self[2, 2].sign) and (self[2, 2].sign == self[3, 3].sign) and self[1, 1].marked
         | 
| 854 | 
            -
                    @winning_sign = self[1, 1].sign
         | 
| 855 | 
            -
                    return true
         | 
| 856 | 
            -
                  end
         | 
| 857 | 
            -
                  if (self[3, 1].sign == self[2, 2].sign) and (self[2, 2].sign == self[1, 3].sign) and self[3, 1].marked
         | 
| 858 | 
            -
                    @winning_sign = self[3, 1].sign
         | 
| 859 | 
            -
                    return true
         | 
| 860 | 
            -
                  end
         | 
| 861 | 
            -
                  false
         | 
| 862 | 
            -
                end
         | 
| 863 | 
            -
              
         | 
| 864 | 
            -
                def draw?
         | 
| 865 | 
            -
                  @board_full = true
         | 
| 866 | 
            -
                  3.times do |x|
         | 
| 867 | 
            -
                    3.times do |y|
         | 
| 868 | 
            -
                      @board_full = false if self[x, y].empty
         | 
| 869 | 
            -
                    end
         | 
| 870 | 
            -
                  end
         | 
| 871 | 
            -
                  self.game_status = DRAW if @board_full
         | 
| 872 | 
            -
                  @board_full
         | 
| 873 | 
            -
                end
         | 
| 874 | 
            -
              
         | 
| 875 | 
            -
                def row_has_same_sign(number)
         | 
| 876 | 
            -
                  row_sign = self[number, 1].sign
         | 
| 877 | 
            -
                  [2, 3].each do |column|
         | 
| 878 | 
            -
                    return false unless row_sign == (self[number, column].sign)
         | 
| 879 | 
            -
                  end
         | 
| 880 | 
            -
                  true if self[number, 1].marked
         | 
| 881 | 
            -
                end
         | 
| 882 | 
            -
              
         | 
| 883 | 
            -
                def column_has_same_sign(number)
         | 
| 884 | 
            -
                  column_sign = self[1, number].sign
         | 
| 885 | 
            -
                  [2, 3].each do |row|
         | 
| 886 | 
            -
                    return false unless column_sign == (self[row, number].sign)
         | 
| 887 | 
            -
                  end
         | 
| 888 | 
            -
                  true if self[1, number].marked
         | 
| 889 | 
            -
                end
         | 
| 890 | 
            -
              
         | 
| 891 | 
            -
              end
         | 
| 892 | 
            -
            end
         | 
| 893 | 
            -
             | 
| 894 | 
            -
            # # #
         | 
| 895 | 
            -
            ```
         | 
| 580 | 
            +
            
         | 
| 896 581 |  | 
| 897 582 | 
             
            ### Scaffolding
         | 
| 898 583 |  | 
| @@ -915,8 +600,6 @@ letting Glimmer scaffolding take care of initial app file structure concerns, su | |
| 915 600 |  | 
| 916 601 | 
             
            You need to have your Git `user.name` and `github.user` configured before scaffolding since Glimmer uses Juwelier, which relies on them in creating a Git repo for your Glimmer app.
         | 
| 917 602 |  | 
| 918 | 
            -
            NOTE: Linux is not fully supported yet with scaffolding. Please report any issues you may encounter.
         | 
| 919 | 
            -
             | 
| 920 603 | 
             
            #### App
         | 
| 921 604 |  | 
| 922 605 | 
             
            Before you start, make sure you are in a JRuby environment with Glimmer gem installed as per "Direct Install" pre-requisites. 
         | 
| @@ -927,7 +610,7 @@ To scaffold a Glimmer app from scratch, run the following command: | |
| 927 610 | 
             
            glimmer scaffold[AppName]
         | 
| 928 611 | 
             
            ```
         | 
| 929 612 |  | 
| 930 | 
            -
            This will generate an advanced "Hello, World!" app, package it as a Mac  | 
| 613 | 
            +
            This will generate an advanced "Hello, World!" app, package it as a Mac DMG/PKG/APP, Windows APP, or Linux GEM, and launch it all in one fell swoop.
         | 
| 931 614 |  | 
| 932 615 | 
             
            Suppose you run:
         | 
| 933 616 |  | 
| @@ -1021,7 +704,7 @@ To scaffold a Glimmer desktopify app from scratch, run the following command: | |
| 1021 704 | 
             
            glimmer scaffold:desktopify[app_name,website]
         | 
| 1022 705 | 
             
            ```
         | 
| 1023 706 |  | 
| 1024 | 
            -
            This will generate a Glimmer app, package it as a Mac  | 
| 707 | 
            +
            This will generate a Glimmer app, package it as a Mac DMG/PKG/APP, Windows APP, or Linux GEM, and launch it all in one fell swoop.
         | 
| 1025 708 |  | 
| 1026 709 | 
             
            Suppose you run:
         | 
| 1027 710 |  | 
| @@ -1304,8 +987,8 @@ Output: | |
| 1304 987 | 
             
              Name         Gem          Version    Author          Description       
         | 
| 1305 988 |  | 
| 1306 989 | 
             
              Css    glimmer-dsl-css    1.1.0     AndyMaleh    Glimmer DSL for CSS    
         | 
| 1307 | 
            -
              Opal   glimmer-dsl-opal   0. | 
| 1308 | 
            -
              Swt    glimmer-dsl-swt    4.17. | 
| 990 | 
            +
              Opal   glimmer-dsl-opal   0.4.0     AndyMaleh    Glimmer DSL for Opal   
         | 
| 991 | 
            +
              Swt    glimmer-dsl-swt    4.17.4.0  AndyMaleh    Glimmer DSL for SWT    
         | 
| 1309 992 | 
             
              Tk     glimmer-dsl-tk     0.0.6     AndyMaleh    Glimmer DSL for Tk     
         | 
| 1310 993 | 
             
              Xml    glimmer-dsl-xml    1.1.0     AndyMaleh    Glimmer DSL for XML                                                                         
         | 
| 1311 994 | 
             
            ```
         | 
| @@ -2824,7 +2507,7 @@ Custom widgets are brand new Glimmer DSL keywords that represent aggregates of e | |
| 2824 2507 |  | 
| 2825 2508 | 
             
            You can find out about [published Glimmer Custom Widgets](https://github.com/AndyObtiva/glimmer-dsl-swt#gem-listing) by running the `glimmer list:gems:customwidget` command
         | 
| 2826 2509 |  | 
| 2827 | 
            -
            Glimmer supports  | 
| 2510 | 
            +
            Glimmer supports three ways of creating custom widgets with minimal code:
         | 
| 2828 2511 | 
             
            1. Method-based Custom Widgets (for single-view-internal reuse): Extract a method containing Glimmer DSL widget syntax. Useful for quickly eliminating redundant code within a single view.
         | 
| 2829 2512 | 
             
            2. Class-based Custom Widgets (for multiple-view-external reuse): Create a class that includes the `Glimmer::UI::CustomWidget` module and Glimmer DSL widget syntax in a `body {}` block. This will automatically extend Glimmer's DSL syntax with an underscored lowercase keyword matching the class name by convention. Useful in making a custom widget available in many views.
         | 
| 2830 2513 |  | 
| @@ -3370,6 +3053,28 @@ shell(:no_resize) { | |
| 3370 3053 |  | 
| 3371 3054 | 
             
            Also, you may invoke `Display.setAppVersion('1.0.0')` if needed for OS app version identification reasons during development, replacing `'1.0.0'` with your application version.
         | 
| 3372 3055 |  | 
| 3056 | 
            +
            #### Code Text Widget
         | 
| 3057 | 
            +
             | 
| 3058 | 
            +
            `code_text` is a Glimmer built-in custom widget that displays syntax highlighted Ruby code in a customized SWT [StyledText](https://help.eclipse.org/2020-09/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/custom/StyledText.html) widget.
         | 
| 3059 | 
            +
             | 
| 3060 | 
            +
            It is used in the [Glimmer Meta-Sample (The Sample of Samples)](#samples):
         | 
| 3061 | 
            +
             | 
| 3062 | 
            +
            
         | 
| 3063 | 
            +
             | 
| 3064 | 
            +
            Glimmer Meta-Sample Code Example:
         | 
| 3065 | 
            +
             | 
| 3066 | 
            +
            ```ruby
         | 
| 3067 | 
            +
            # ...
         | 
| 3068 | 
            +
            code_text {
         | 
| 3069 | 
            +
              text bind(SampleDirectory, 'selected_sample.content')
         | 
| 3070 | 
            +
              editable false
         | 
| 3071 | 
            +
              caret nil
         | 
| 3072 | 
            +
            }
         | 
| 3073 | 
            +
            # ...
         | 
| 3074 | 
            +
            ```
         | 
| 3075 | 
            +
             | 
| 3076 | 
            +
            To use, simply use `code_text` in place of `text` or `styled_text` widget. If you set its `text` value to Ruby code, it automatically styles it with syntax highlighting.
         | 
| 3077 | 
            +
             | 
| 3373 3078 | 
             
            #### Video Widget
         | 
| 3374 3079 |  | 
| 3375 3080 | 
             
            [](https://github.com/AndyObtiva/glimmer-cw-video)
         | 
| @@ -3378,6 +3083,39 @@ Glimmer supports a [video custom widget](https://github.com/AndyObtiva/glimmer-c | |
| 3378 3083 |  | 
| 3379 3084 | 
             
            You may obtain via `glimmer-cw-video` gem.
         | 
| 3380 3085 |  | 
| 3086 | 
            +
            #### Sash Form Widget
         | 
| 3087 | 
            +
             | 
| 3088 | 
            +
            `sash_form` is an SWT built-in custom widget that provides a resizable sash that splits a window area into two or more panes.
         | 
| 3089 | 
            +
             | 
| 3090 | 
            +
            It can be customized with the `weights` attribute by setting initial weights to size the panes at first display.
         | 
| 3091 | 
            +
             | 
| 3092 | 
            +
            Example (you may copy/paste in [`girb`](#girb-glimmer-irb-command)):
         | 
| 3093 | 
            +
             | 
| 3094 | 
            +
            ```ruby
         | 
| 3095 | 
            +
            shell {
         | 
| 3096 | 
            +
              text 'Sash Form Example'
         | 
| 3097 | 
            +
              sash_form {
         | 
| 3098 | 
            +
                label {
         | 
| 3099 | 
            +
                  text '(resize >>)'
         | 
| 3100 | 
            +
                  background :dark_green
         | 
| 3101 | 
            +
                  foreground :white
         | 
| 3102 | 
            +
                  font height: 20
         | 
| 3103 | 
            +
                }
         | 
| 3104 | 
            +
                label {
         | 
| 3105 | 
            +
                  text '(<< resize)'
         | 
| 3106 | 
            +
                  background :red
         | 
| 3107 | 
            +
                  foreground :white
         | 
| 3108 | 
            +
                  font height: 20
         | 
| 3109 | 
            +
                }
         | 
| 3110 | 
            +
                weights 1, 2
         | 
| 3111 | 
            +
              }
         | 
| 3112 | 
            +
            }.open
         | 
| 3113 | 
            +
            ```
         | 
| 3114 | 
            +
             | 
| 3115 | 
            +
            You may check out a more full-fledged example in [Hello, Sash Form!](#hello-sash-form)
         | 
| 3116 | 
            +
             | 
| 3117 | 
            +
            
         | 
| 3118 | 
            +
             | 
| 3381 3119 | 
             
            #### Browser Widget
         | 
| 3382 3120 |  | 
| 3383 3121 | 
             
            
         | 
| @@ -3666,12 +3404,16 @@ https://www.eclipse.org/nebula/ | |
| 3666 3404 |  | 
| 3667 3405 | 
             
            Check the [samples](samples) directory in [glimmer-dsl-swt](https://github.com/AndyObtiva/glimmer-dsl-swt) for examples on how to write Glimmer applications. To run a sample, make sure to install the `glimmer` gem first and then use the `glimmer` command to run it (alternatively, you may clone the repo, follow [CONTRIBUTING.md](CONTRIBUTING.md) instructions, and run samples locally with development glimmer command: `bin/glimmer`).
         | 
| 3668 3406 |  | 
| 3669 | 
            -
             | 
| 3407 | 
            +
            You may run any sample via this command:
         | 
| 3670 3408 |  | 
| 3671 3409 | 
             
            ```
         | 
| 3672 | 
            -
            samples | 
| 3410 | 
            +
            glimmer samples
         | 
| 3673 3411 | 
             
            ```
         | 
| 3674 3412 |  | 
| 3413 | 
            +
            This brings up the [Glimmer Meta-Sample (The Sample of Samples)](samples/elaborate/meta_sample.rb)
         | 
| 3414 | 
            +
             | 
| 3415 | 
            +
            
         | 
| 3416 | 
            +
             | 
| 3675 3417 | 
             
            ### Hello Samples
         | 
| 3676 3418 |  | 
| 3677 3419 | 
             
            For hello-type simple samples, check the following.
         | 
| @@ -3682,12 +3424,6 @@ Code: | |
| 3682 3424 |  | 
| 3683 3425 | 
             
            [samples/hello/hello_world.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_world.rb)
         | 
| 3684 3426 |  | 
| 3685 | 
            -
            Run:
         | 
| 3686 | 
            -
             | 
| 3687 | 
            -
            ```
         | 
| 3688 | 
            -
            glimmer sample:run[hello_world]
         | 
| 3689 | 
            -
            ```
         | 
| 3690 | 
            -
             | 
| 3691 3427 | 
             
            
         | 
| 3692 3428 |  | 
| 3693 3429 | 
             
            #### Hello, Tab!
         | 
| @@ -3696,12 +3432,6 @@ Code: | |
| 3696 3432 |  | 
| 3697 3433 | 
             
            [samples/hello/hello_tab.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_tab.rb)
         | 
| 3698 3434 |  | 
| 3699 | 
            -
            Run:
         | 
| 3700 | 
            -
             | 
| 3701 | 
            -
            ```
         | 
| 3702 | 
            -
            glimmer sample:run[hello_tab]
         | 
| 3703 | 
            -
            ```
         | 
| 3704 | 
            -
             | 
| 3705 3435 | 
             
            
         | 
| 3706 3436 | 
             
            
         | 
| 3707 3437 |  | 
| @@ -3713,12 +3443,6 @@ Code: | |
| 3713 3443 |  | 
| 3714 3444 | 
             
            [samples/hello/hello_combo.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_combo.rb)
         | 
| 3715 3445 |  | 
| 3716 | 
            -
            Run:
         | 
| 3717 | 
            -
             | 
| 3718 | 
            -
            ```
         | 
| 3719 | 
            -
            glimmer sample:run[hello_combo]
         | 
| 3720 | 
            -
            ```
         | 
| 3721 | 
            -
             | 
| 3722 3446 | 
             
            
         | 
| 3723 3447 | 
             
            
         | 
| 3724 3448 |  | 
| @@ -3730,12 +3454,6 @@ Code: | |
| 3730 3454 |  | 
| 3731 3455 | 
             
            [samples/hello/hello_list_single_selection.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_list_single_selection.rb)
         | 
| 3732 3456 |  | 
| 3733 | 
            -
            Run:
         | 
| 3734 | 
            -
             | 
| 3735 | 
            -
            ```
         | 
| 3736 | 
            -
            glimmer sample:run[hello_list_single_selection]
         | 
| 3737 | 
            -
            ```
         | 
| 3738 | 
            -
             | 
| 3739 3457 | 
             
            
         | 
| 3740 3458 |  | 
| 3741 3459 | 
             
            #### Hello, List Multi Selection!
         | 
| @@ -3746,12 +3464,6 @@ Code: | |
| 3746 3464 |  | 
| 3747 3465 | 
             
            [samples/hello/hello_list_multi_selection.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_list_multi_selection.rb)
         | 
| 3748 3466 |  | 
| 3749 | 
            -
            Run:
         | 
| 3750 | 
            -
             | 
| 3751 | 
            -
            ```
         | 
| 3752 | 
            -
            glimmer sample:run[hello_list_multi_selection]
         | 
| 3753 | 
            -
            ```
         | 
| 3754 | 
            -
             | 
| 3755 3467 | 
             
            
         | 
| 3756 3468 |  | 
| 3757 3469 | 
             
            #### Hello, Computed!
         | 
| @@ -3762,12 +3474,6 @@ Code: | |
| 3762 3474 |  | 
| 3763 3475 | 
             
            [samples/hello/hello_computed.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_computed.rb)
         | 
| 3764 3476 |  | 
| 3765 | 
            -
            Run:
         | 
| 3766 | 
            -
             | 
| 3767 | 
            -
            ```
         | 
| 3768 | 
            -
            glimmer sample:run[hello_computed]
         | 
| 3769 | 
            -
            ```
         | 
| 3770 | 
            -
             | 
| 3771 3477 | 
             
            
         | 
| 3772 3478 |  | 
| 3773 3479 | 
             
            #### Hello, Message Box!
         | 
| @@ -3778,12 +3484,6 @@ Code: | |
| 3778 3484 |  | 
| 3779 3485 | 
             
            [samples/hello/hello_message_box.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_message_box.rb)
         | 
| 3780 3486 |  | 
| 3781 | 
            -
            Run:
         | 
| 3782 | 
            -
             | 
| 3783 | 
            -
            ```
         | 
| 3784 | 
            -
            glimmer sample:run[hello_message_box]
         | 
| 3785 | 
            -
            ```
         | 
| 3786 | 
            -
             | 
| 3787 3487 | 
             
            
         | 
| 3788 3488 | 
             
            
         | 
| 3789 3489 |  | 
| @@ -3795,12 +3495,6 @@ Code: | |
| 3795 3495 |  | 
| 3796 3496 | 
             
            [samples/hello/hello_browser.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_browser.rb)
         | 
| 3797 3497 |  | 
| 3798 | 
            -
            Run:
         | 
| 3799 | 
            -
             | 
| 3800 | 
            -
            ```
         | 
| 3801 | 
            -
            glimmer sample:run[hello_browser]
         | 
| 3802 | 
            -
            ```
         | 
| 3803 | 
            -
             | 
| 3804 3498 | 
             
            
         | 
| 3805 3499 |  | 
| 3806 3500 | 
             
            #### Hello, Drag and Drop!
         | 
| @@ -3811,12 +3505,6 @@ Code: | |
| 3811 3505 |  | 
| 3812 3506 | 
             
            [samples/hello/hello_drag_and_drop.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_drag_and_drop.rb)
         | 
| 3813 3507 |  | 
| 3814 | 
            -
            Run:
         | 
| 3815 | 
            -
             | 
| 3816 | 
            -
            ```
         | 
| 3817 | 
            -
            glimmer sample:run[hello_drag_and_drop]
         | 
| 3818 | 
            -
            ```
         | 
| 3819 | 
            -
             | 
| 3820 3508 | 
             
            
         | 
| 3821 3509 |  | 
| 3822 3510 | 
             
            #### Hello, Menu Bar!
         | 
| @@ -3827,12 +3515,6 @@ Code: | |
| 3827 3515 |  | 
| 3828 3516 | 
             
            [samples/hello/hello_menu_bar.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_menu_bar.rb)
         | 
| 3829 3517 |  | 
| 3830 | 
            -
            Run:
         | 
| 3831 | 
            -
             | 
| 3832 | 
            -
            ```
         | 
| 3833 | 
            -
            glimmer sample:run[hello_menu_bar]
         | 
| 3834 | 
            -
            ```
         | 
| 3835 | 
            -
             | 
| 3836 3518 | 
             
            
         | 
| 3837 3519 | 
             
            
         | 
| 3838 3520 | 
             
            
         | 
| @@ -3845,12 +3527,6 @@ Code: | |
| 3845 3527 |  | 
| 3846 3528 | 
             
            [samples/hello/hello_pop_up_context_menu.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_pop_up_context_menu.rb)
         | 
| 3847 3529 |  | 
| 3848 | 
            -
            Run:
         | 
| 3849 | 
            -
             | 
| 3850 | 
            -
            ```
         | 
| 3851 | 
            -
            glimmer sample:run[hello_pop_up_context_menu]
         | 
| 3852 | 
            -
            ```
         | 
| 3853 | 
            -
             | 
| 3854 3530 | 
             
            
         | 
| 3855 3531 | 
             
            
         | 
| 3856 3532 |  | 
| @@ -3862,12 +3538,6 @@ Code: | |
| 3862 3538 |  | 
| 3863 3539 | 
             
            [samples/hello/hello_custom_widget.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_custom_widget.rb)
         | 
| 3864 3540 |  | 
| 3865 | 
            -
            Run:
         | 
| 3866 | 
            -
             | 
| 3867 | 
            -
            ```
         | 
| 3868 | 
            -
            glimmer sample:run[hello_custom_widget]
         | 
| 3869 | 
            -
            ```
         | 
| 3870 | 
            -
             | 
| 3871 3541 | 
             
            
         | 
| 3872 3542 |  | 
| 3873 3543 | 
             
            #### Hello, Custom Shell!
         | 
| @@ -3878,17 +3548,43 @@ Code: | |
| 3878 3548 |  | 
| 3879 3549 | 
             
            [samples/hello/hello_custom_shell.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_custom_shell.rb)
         | 
| 3880 3550 |  | 
| 3881 | 
            -
            Run:
         | 
| 3882 | 
            -
             | 
| 3883 | 
            -
            ```
         | 
| 3884 | 
            -
            glimmer sample:run[hello_custom_shell]
         | 
| 3885 | 
            -
            ```
         | 
| 3886 | 
            -
             | 
| 3887 3551 | 
             
            
         | 
| 3888 3552 | 
             
            
         | 
| 3889 3553 | 
             
            
         | 
| 3890 3554 | 
             
            
         | 
| 3891 3555 |  | 
| 3556 | 
            +
            #### Hello, Sash Form!
         | 
| 3557 | 
            +
             | 
| 3558 | 
            +
            This sample demonstrates the use of a `sash_form` in Glimmer.
         | 
| 3559 | 
            +
             | 
| 3560 | 
            +
            Code:
         | 
| 3561 | 
            +
             | 
| 3562 | 
            +
            [samples/hello/hello_sash_form.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/hello/hello_sash_form.rb)
         | 
| 3563 | 
            +
             | 
| 3564 | 
            +
            Hello, Sash Form! Horizontal Orientation
         | 
| 3565 | 
            +
             | 
| 3566 | 
            +
            
         | 
| 3567 | 
            +
             | 
| 3568 | 
            +
            Hello, Sash Form! Resized
         | 
| 3569 | 
            +
             | 
| 3570 | 
            +
            
         | 
| 3571 | 
            +
             | 
| 3572 | 
            +
            Hello, Sash Form! Sash Width Changed
         | 
| 3573 | 
            +
             | 
| 3574 | 
            +
            
         | 
| 3575 | 
            +
             | 
| 3576 | 
            +
            Hello, Sash Form! Vertical Orientation
         | 
| 3577 | 
            +
             | 
| 3578 | 
            +
            
         | 
| 3579 | 
            +
             | 
| 3580 | 
            +
            Hello, Sash Form! Green Label Maximized
         | 
| 3581 | 
            +
             | 
| 3582 | 
            +
            
         | 
| 3583 | 
            +
             | 
| 3584 | 
            +
            Hello, Sash Form! Red Label Maximized
         | 
| 3585 | 
            +
             | 
| 3586 | 
            +
            
         | 
| 3587 | 
            +
             | 
| 3892 3588 | 
             
            ### Elaborate Samples
         | 
| 3893 3589 |  | 
| 3894 3590 | 
             
            For more elaborate samples, check the following:
         | 
| @@ -3903,12 +3599,6 @@ Code: | |
| 3903 3599 |  | 
| 3904 3600 | 
             
            [samples/elaborate/user_profile.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/user_profile.rb)
         | 
| 3905 3601 |  | 
| 3906 | 
            -
            Run:
         | 
| 3907 | 
            -
             | 
| 3908 | 
            -
            ```
         | 
| 3909 | 
            -
            glimmer sample:run[user_profile]
         | 
| 3910 | 
            -
            ```
         | 
| 3911 | 
            -
             | 
| 3912 3602 | 
             
            
         | 
| 3913 3603 |  | 
| 3914 3604 | 
             
            #### Login
         | 
| @@ -3919,12 +3609,6 @@ Code: | |
| 3919 3609 |  | 
| 3920 3610 | 
             
            [samples/elaborate/login.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/login.rb)
         | 
| 3921 3611 |  | 
| 3922 | 
            -
            Run:
         | 
| 3923 | 
            -
             | 
| 3924 | 
            -
            ```
         | 
| 3925 | 
            -
            glimmer sample:run[login]
         | 
| 3926 | 
            -
            ```
         | 
| 3927 | 
            -
             | 
| 3928 3612 | 
             
            
         | 
| 3929 3613 | 
             
            
         | 
| 3930 3614 | 
             
            
         | 
| @@ -3939,12 +3623,6 @@ Code: | |
| 3939 3623 |  | 
| 3940 3624 | 
             
            [samples/elaborate/tic_tac_toe.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/tic_tac_toe.rb)
         | 
| 3941 3625 |  | 
| 3942 | 
            -
            Run:
         | 
| 3943 | 
            -
             | 
| 3944 | 
            -
            ```
         | 
| 3945 | 
            -
            glimmer sample:run[tic_tac_toe]
         | 
| 3946 | 
            -
            ```
         | 
| 3947 | 
            -
             | 
| 3948 3626 | 
             
            
         | 
| 3949 3627 | 
             
            
         | 
| 3950 3628 | 
             
            
         | 
| @@ -3957,12 +3635,6 @@ Code: | |
| 3957 3635 |  | 
| 3958 3636 | 
             
            [samples/elaborate/contact_manager.rb](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/samples/elaborate/contact_manager.rb)
         | 
| 3959 3637 |  | 
| 3960 | 
            -
            Run:
         | 
| 3961 | 
            -
             | 
| 3962 | 
            -
            ```
         | 
| 3963 | 
            -
            glimmer sample:run[contact_manager]
         | 
| 3964 | 
            -
            ```
         | 
| 3965 | 
            -
             | 
| 3966 3638 | 
             
            Contact Manager
         | 
| 3967 3639 |  | 
| 3968 3640 | 
             
            
         | 
| @@ -4034,7 +3706,7 @@ If you have a Glimmer app you would like referenced here, please mention in a Pu | |
| 4034 3706 |  | 
| 4035 3707 | 
             
            ## Packaging & Distribution
         | 
| 4036 3708 |  | 
| 4037 | 
            -
            Note: this section mostly applies to Mac and Windows. On Linux,  | 
| 3709 | 
            +
            Note: this section mostly applies to Mac and Windows. On Linux, you can just run `glimmer package:gem` and after installing the gem, you get an executable matching the name of the app/custom-shell-gem you are building (e.g. `calculator` command becomes available after installing the [glimmer-cs-calculator](https://github.com/AndyObtiva/glimmer-cs-calculator) gem)
         | 
| 4038 3710 |  | 
| 4039 3711 | 
             
            Glimmer simplifies the process of native-executable packaging and distribution on Mac and Windows via a single `glimmer package` command:
         | 
| 4040 3712 |  |