glimmer-dsl-libui 0.9.4 → 0.9.6
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 +11 -1
 - data/README.md +287 -7
 - data/VERSION +1 -1
 - data/glimmer-dsl-libui.gemspec +0 -0
 - data/lib/glimmer/rake_task/list.rb +6 -6
 - data/lib/glimmer/rake_task/scaffold.rb +54 -16
 - data/lib/glimmer/rake_task.rb +21 -32
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 06c9ed7f6b104ec0f5a034ee6f74fa2398de9b1d11ffea2e2d1448f07e2c7e43
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 48591881860e3317e2e79a88840fcb0b51d093ba017e0b74dc45e8382ead00b3
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d17b5b51140d69186f2237efffdce6a9e65ec675e568fcb96c911593cb934392ad423da0ea64e75573ef5d657f3690b87a3bca9723e04ca103922b98204e24a1
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 658eb9d2fa4b00a7c4edbb85ef42dbbb3b81f04e4c16e3ccd93715e252a726317bd6fec59081047d6b6698bfb38ab8594413afee6638eccc2373ccb0a8830fcd
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,8 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Change Log
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## 0.9.6
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            - Scaffold Custom Window Gem via `glimmer scaffold:gem:customwindow[name,namespace]` (or alias: `glimmer scaffold:gem:cw[name,namespace]`)
         
     | 
| 
      
 6 
     | 
    
         
            +
            - List Custom Window Gems (expected name format: `glimmer-libui-cw-gemname-namespace`) via `glimmer list:gems:customwindow[query]` (or alias: `glimmer list:gems:cw[query]`)
         
     | 
| 
      
 7 
     | 
    
         
            +
            - List Glimmer DSLs via `glimmer list:gems:dsl[query]`
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ## 0.9.5
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            - Scaffold Custom Control via `glimmer scaffold:customcontrol[name,namespace]` (or alias: `glimmer scaffold:cc[name,namespace]`)
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       3 
13 
     | 
    
         
             
            ## 0.9.4
         
     | 
| 
       4 
14 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            - Scaffold Custom Window via `glimmer scaffold:customwindow[name,namespace]`
         
     | 
| 
      
 15 
     | 
    
         
            +
            - Scaffold Custom Window via `glimmer scaffold:customwindow[name,namespace]` (or alias: `glimmer scaffold:cw[name,namespace]`)
         
     | 
| 
       6 
16 
     | 
    
         | 
| 
       7 
17 
     | 
    
         
             
            ## 0.9.3
         
     | 
| 
       8 
18 
     | 
    
         | 
    
        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 LibUI 0.9. 
     | 
| 
      
 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 LibUI 0.9.6
         
     | 
| 
       2 
2 
     | 
    
         
             
            ## Prerequisite-Free Ruby Desktop Development Cross-Platform Native GUI Library  ([Fukuoka Award Winning](http://www.digitalfukuoka.jp/topics/187?locale=ja))
         
     | 
| 
       3 
3 
     | 
    
         
             
            ### The Quickest Way From Zero To GUI
         
     | 
| 
       4 
4 
     | 
    
         
             
            [](http://badge.fury.io/rb/glimmer-dsl-libui)
         
     | 
| 
         @@ -28,7 +28,7 @@ The main trade-off in using [Glimmer DSL for LibUI](https://rubygems.org/gems/gl 
     | 
|
| 
       28 
28 
     | 
    
         
             
            - Requiring the [least amount of syntax](#glimmer-gui-dsl-concepts) possible to build GUI
         
     | 
| 
       29 
29 
     | 
    
         
             
            - [Custom Control](#custom-keywords) support
         
     | 
| 
       30 
30 
     | 
    
         
             
            - [Bidirectional/Unidirectional Data-Binding](#data-binding) to declaratively wire and automatically synchronize GUI Views with Models
         
     | 
| 
       31 
     | 
    
         
            -
            - [Scaffolding](scaffold-application) for new custom controls, apps, and gems
         
     | 
| 
      
 31 
     | 
    
         
            +
            - [Scaffolding](#scaffold-application) for new custom windows/controls, apps, and gems
         
     | 
| 
       32 
32 
     | 
    
         
             
            - [Far Future Plan] Native-Executable packaging on Mac, Windows, and Linux.
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
            Hello, World!
         
     | 
| 
         @@ -352,6 +352,10 @@ Learn more about the differences between various [Glimmer](https://github.com/An 
     | 
|
| 
       352 
352 
     | 
    
         
             
                - [Run Examples](#run-examples)
         
     | 
| 
       353 
353 
     | 
    
         
             
                - [Scaffold Application](#scaffold-application)
         
     | 
| 
       354 
354 
     | 
    
         
             
                - [Scaffold Custom Window](#scaffold-custom-window)
         
     | 
| 
      
 355 
     | 
    
         
            +
                - [Scaffold Custom Control](#scaffold-custom-control)
         
     | 
| 
      
 356 
     | 
    
         
            +
                - [Scaffold Custom Window Gem](#scaffold-custom-window-gem)
         
     | 
| 
      
 357 
     | 
    
         
            +
                - [List Custom Window Gems](#list-custom-window-gems)
         
     | 
| 
      
 358 
     | 
    
         
            +
                - [List Glimmer DSLs](#list-glimmer-dsls)
         
     | 
| 
       355 
359 
     | 
    
         
             
              - [Girb (Glimmer IRB)](#girb-glimmer-irb)
         
     | 
| 
       356 
360 
     | 
    
         
             
              - [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
         
     | 
| 
       357 
361 
     | 
    
         
             
              - [API](#api)
         
     | 
| 
         @@ -422,7 +426,7 @@ gem install glimmer-dsl-libui 
     | 
|
| 
       422 
426 
     | 
    
         
             
            Or install via Bundler `Gemfile`:
         
     | 
| 
       423 
427 
     | 
    
         | 
| 
       424 
428 
     | 
    
         
             
            ```ruby
         
     | 
| 
       425 
     | 
    
         
            -
            gem 'glimmer-dsl-libui', '~> 0.9. 
     | 
| 
      
 429 
     | 
    
         
            +
            gem 'glimmer-dsl-libui', '~> 0.9.6'
         
     | 
| 
       426 
430 
     | 
    
         
             
            ```
         
     | 
| 
       427 
431 
     | 
    
         | 
| 
       428 
432 
     | 
    
         
             
            Test that installation worked by running the [Glimmer Meta-Example](#examples):
         
     | 
| 
         @@ -738,9 +742,9 @@ When you are in a scaffolded application, you can scaffold a new custom window ( 
     | 
|
| 
       738 
742 
     | 
    
         
             
            glimmer scaffold:customwindow[name,namespace]
         
     | 
| 
       739 
743 
     | 
    
         
             
            ```
         
     | 
| 
       740 
744 
     | 
    
         | 
| 
       741 
     | 
    
         
            -
            The name represents the custom window view class name (it can be underscored, and Glimmer will automatically classify it).
         
     | 
| 
      
 745 
     | 
    
         
            +
            The `name` represents the custom window view class name (it can be underscored, and Glimmer will automatically classify it).
         
     | 
| 
       742 
746 
     | 
    
         | 
| 
       743 
     | 
    
         
            -
            The namespace is optional and represents the module that the custom window view class will live under. If left off, the main application class namespace is used (e.g. the top-level `HelloWorld` class namespace for a `hello_world` application).
         
     | 
| 
      
 747 
     | 
    
         
            +
            The `namespace` is optional and represents the module that the custom window view class will live under. If left off, the main application class namespace is used (e.g. the top-level `HelloWorld` class namespace for a `hello_world` application).
         
     | 
| 
       744 
748 
     | 
    
         | 
| 
       745 
749 
     | 
    
         
             
            You can also use the shorter `cw` alias for `customwindow`:
         
     | 
| 
       746 
750 
     | 
    
         | 
| 
         @@ -803,7 +807,7 @@ class HelloWorld 
     | 
|
| 
       803 
807 
     | 
    
         
             
            end
         
     | 
| 
       804 
808 
     | 
    
         
             
            ```
         
     | 
| 
       805 
809 
     | 
    
         | 
| 
       806 
     | 
    
         
            -
            When the generated file is required in another view, the custom window keyword `greeting_window` become available and reusable, like by calling:
         
     | 
| 
      
 810 
     | 
    
         
            +
            When the generated file is required in another view (e.g. `require 'hello_world/view/greeting_window'`), the custom window keyword `greeting_window` become available and reusable, like by calling:
         
     | 
| 
       807 
811 
     | 
    
         | 
| 
       808 
812 
     | 
    
         
             
            ```ruby
         
     | 
| 
       809 
813 
     | 
    
         
             
            greeting_window.show
         
     | 
| 
         @@ -864,7 +868,7 @@ module Station 
     | 
|
| 
       864 
868 
     | 
    
         
             
            end
         
     | 
| 
       865 
869 
     | 
    
         
             
            ```
         
     | 
| 
       866 
870 
     | 
    
         | 
| 
       867 
     | 
    
         
            -
            When that file is required, the `train` keyword becomes available:
         
     | 
| 
      
 871 
     | 
    
         
            +
            When that file is required in another view (e.g. `require 'station/view/train'`), the `train` keyword becomes available:
         
     | 
| 
       868 
872 
     | 
    
         | 
| 
       869 
873 
     | 
    
         
             
            ```ruby
         
     | 
| 
       870 
874 
     | 
    
         
             
            train.show
         
     | 
| 
         @@ -882,6 +886,282 @@ Or another `train` custom window view: 
     | 
|
| 
       882 
886 
     | 
    
         
             
            hello_world__view__train.show
         
     | 
| 
       883 
887 
     | 
    
         
             
            ```
         
     | 
| 
       884 
888 
     | 
    
         | 
| 
      
 889 
     | 
    
         
            +
            ### Scaffold Custom Control
         
     | 
| 
      
 890 
     | 
    
         
            +
             
     | 
| 
      
 891 
     | 
    
         
            +
            When you are in a scaffolded application, you can scaffold a new custom control (a control that you can put anything in to represent a view concept in your application) by running this command:
         
     | 
| 
      
 892 
     | 
    
         
            +
             
     | 
| 
      
 893 
     | 
    
         
            +
            ```
         
     | 
| 
      
 894 
     | 
    
         
            +
            glimmer scaffold:customcontrol[name,namespace]
         
     | 
| 
      
 895 
     | 
    
         
            +
            ```
         
     | 
| 
      
 896 
     | 
    
         
            +
             
     | 
| 
      
 897 
     | 
    
         
            +
            The `name` represents the custom control view class name (it can be underscored, and Glimmer will automatically classify it).
         
     | 
| 
      
 898 
     | 
    
         
            +
             
     | 
| 
      
 899 
     | 
    
         
            +
            The `namespace` is optional and represents the module that the custom control view class will live under. If left off, the main application class namespace is used (e.g. the top-level `HelloWorld` class namespace for a `hello_world` application).
         
     | 
| 
      
 900 
     | 
    
         
            +
             
     | 
| 
      
 901 
     | 
    
         
            +
            You can also use the shorter `cc` alias for `customcontrol`:
         
     | 
| 
      
 902 
     | 
    
         
            +
             
     | 
| 
      
 903 
     | 
    
         
            +
            ```
         
     | 
| 
      
 904 
     | 
    
         
            +
            glimmer scaffold:cc[name,namespace]
         
     | 
| 
      
 905 
     | 
    
         
            +
            ```
         
     | 
| 
      
 906 
     | 
    
         
            +
             
     | 
| 
      
 907 
     | 
    
         
            +
            For example by running this command under a `hello_world` application:
         
     | 
| 
      
 908 
     | 
    
         
            +
             
     | 
| 
      
 909 
     | 
    
         
            +
            ```
         
     | 
| 
      
 910 
     | 
    
         
            +
            glimmer scaffold:cw[model_form]
         
     | 
| 
      
 911 
     | 
    
         
            +
            ```
         
     | 
| 
      
 912 
     | 
    
         
            +
             
     | 
| 
      
 913 
     | 
    
         
            +
            That will generate this class under `app/hello_world/view/model_form`:
         
     | 
| 
      
 914 
     | 
    
         
            +
             
     | 
| 
      
 915 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 916 
     | 
    
         
            +
            class HelloWorld
         
     | 
| 
      
 917 
     | 
    
         
            +
              module View
         
     | 
| 
      
 918 
     | 
    
         
            +
                class ModelForm
         
     | 
| 
      
 919 
     | 
    
         
            +
                  include Glimmer::LibUI::CustomControl
         
     | 
| 
      
 920 
     | 
    
         
            +
              
         
     | 
| 
      
 921 
     | 
    
         
            +
                  ## Add options like the following to configure CustomControl by outside consumers
         
     | 
| 
      
 922 
     | 
    
         
            +
                  #
         
     | 
| 
      
 923 
     | 
    
         
            +
                  # options :custom_text, :background_color
         
     | 
| 
      
 924 
     | 
    
         
            +
                  # option :foreground_color, default: :red
         
     | 
| 
      
 925 
     | 
    
         
            +
                  
         
     | 
| 
      
 926 
     | 
    
         
            +
                  # Replace example options with your own options
         
     | 
| 
      
 927 
     | 
    
         
            +
                  option :model
         
     | 
| 
      
 928 
     | 
    
         
            +
                  option :attributes
         
     | 
| 
      
 929 
     | 
    
         
            +
              
         
     | 
| 
      
 930 
     | 
    
         
            +
                  ## Use before_body block to pre-initialize variables to use in body
         
     | 
| 
      
 931 
     | 
    
         
            +
                  #
         
     | 
| 
      
 932 
     | 
    
         
            +
                  #
         
     | 
| 
      
 933 
     | 
    
         
            +
                  before_body do
         
     | 
| 
      
 934 
     | 
    
         
            +
                    # Replace example code with your own before_body code
         
     | 
| 
      
 935 
     | 
    
         
            +
                    default_model_attributes = [:first_name, :last_name, :email]
         
     | 
| 
      
 936 
     | 
    
         
            +
                    default_model_class = Struct.new(*default_model_attributes)
         
     | 
| 
      
 937 
     | 
    
         
            +
                    self.model ||= default_model_class.new
         
     | 
| 
      
 938 
     | 
    
         
            +
                    self.attributes ||= default_model_attributes
         
     | 
| 
      
 939 
     | 
    
         
            +
                  end
         
     | 
| 
      
 940 
     | 
    
         
            +
              
         
     | 
| 
      
 941 
     | 
    
         
            +
                  ## Use after_body block to setup observers for controls in body
         
     | 
| 
      
 942 
     | 
    
         
            +
                  #
         
     | 
| 
      
 943 
     | 
    
         
            +
                  # after_body do
         
     | 
| 
      
 944 
     | 
    
         
            +
                  #
         
     | 
| 
      
 945 
     | 
    
         
            +
                  # end
         
     | 
| 
      
 946 
     | 
    
         
            +
              
         
     | 
| 
      
 947 
     | 
    
         
            +
                  ## Add control content under custom control body
         
     | 
| 
      
 948 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 949 
     | 
    
         
            +
                  ## If you want to add a window as the top-most control,
         
     | 
| 
      
 950 
     | 
    
         
            +
                  ## consider creating a custom window instead
         
     | 
| 
      
 951 
     | 
    
         
            +
                  ## (Glimmer::LibUI::CustomWindow offers window convenience methods, like show and hide)
         
     | 
| 
      
 952 
     | 
    
         
            +
                  #
         
     | 
| 
      
 953 
     | 
    
         
            +
                  body {
         
     | 
| 
      
 954 
     | 
    
         
            +
                    # Replace example content (model_form custom control) with your own custom control content.
         
     | 
| 
      
 955 
     | 
    
         
            +
                    form {
         
     | 
| 
      
 956 
     | 
    
         
            +
                      attributes.each do |attribute|
         
     | 
| 
      
 957 
     | 
    
         
            +
                        entry { |e|
         
     | 
| 
      
 958 
     | 
    
         
            +
                          label attribute.to_s.underscore.split('_').map(&:capitalize).join(' ')
         
     | 
| 
      
 959 
     | 
    
         
            +
                          text <=> [model, attribute]
         
     | 
| 
      
 960 
     | 
    
         
            +
                        }
         
     | 
| 
      
 961 
     | 
    
         
            +
                      end
         
     | 
| 
      
 962 
     | 
    
         
            +
                    }
         
     | 
| 
      
 963 
     | 
    
         
            +
                  }
         
     | 
| 
      
 964 
     | 
    
         
            +
              
         
     | 
| 
      
 965 
     | 
    
         
            +
                end
         
     | 
| 
      
 966 
     | 
    
         
            +
              end
         
     | 
| 
      
 967 
     | 
    
         
            +
            end
         
     | 
| 
      
 968 
     | 
    
         
            +
            ```
         
     | 
| 
      
 969 
     | 
    
         
            +
             
     | 
| 
      
 970 
     | 
    
         
            +
            When the generated file is required in another view (e.g. `require 'hello_world/view/model_form'`), the custom control keyword `model_form` become available and reusable, like by calling:
         
     | 
| 
      
 971 
     | 
    
         
            +
             
     | 
| 
      
 972 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 973 
     | 
    
         
            +
            window {
         
     | 
| 
      
 974 
     | 
    
         
            +
              vertical_box {
         
     | 
| 
      
 975 
     | 
    
         
            +
                label('Form:')
         
     | 
| 
      
 976 
     | 
    
         
            +
                model_form(model: some_model, attributes: array_of_attributes)
         
     | 
| 
      
 977 
     | 
    
         
            +
              }
         
     | 
| 
      
 978 
     | 
    
         
            +
            }
         
     | 
| 
      
 979 
     | 
    
         
            +
            ```
         
     | 
| 
      
 980 
     | 
    
         
            +
             
     | 
| 
      
 981 
     | 
    
         
            +
            Here is an example that generates a custom control with a namespace:
         
     | 
| 
      
 982 
     | 
    
         
            +
             
     | 
| 
      
 983 
     | 
    
         
            +
            ```
         
     | 
| 
      
 984 
     | 
    
         
            +
            glimmer scaffold:cw[model_form,common]
         
     | 
| 
      
 985 
     | 
    
         
            +
            ```
         
     | 
| 
      
 986 
     | 
    
         
            +
             
     | 
| 
      
 987 
     | 
    
         
            +
            That will generate this class under `app/common/view/model_form`:
         
     | 
| 
      
 988 
     | 
    
         
            +
             
     | 
| 
      
 989 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 990 
     | 
    
         
            +
            module Common
         
     | 
| 
      
 991 
     | 
    
         
            +
              module View
         
     | 
| 
      
 992 
     | 
    
         
            +
                class ModelForm
         
     | 
| 
      
 993 
     | 
    
         
            +
                  include Glimmer::LibUI::CustomControl
         
     | 
| 
      
 994 
     | 
    
         
            +
              
         
     | 
| 
      
 995 
     | 
    
         
            +
                  ## Add options like the following to configure CustomControl by outside consumers
         
     | 
| 
      
 996 
     | 
    
         
            +
                  #
         
     | 
| 
      
 997 
     | 
    
         
            +
                  # options :custom_text, :background_color
         
     | 
| 
      
 998 
     | 
    
         
            +
                  # option :foreground_color, default: :red
         
     | 
| 
      
 999 
     | 
    
         
            +
                  
         
     | 
| 
      
 1000 
     | 
    
         
            +
                  # Replace example options with your own options
         
     | 
| 
      
 1001 
     | 
    
         
            +
                  option :model
         
     | 
| 
      
 1002 
     | 
    
         
            +
                  option :attributes
         
     | 
| 
      
 1003 
     | 
    
         
            +
              
         
     | 
| 
      
 1004 
     | 
    
         
            +
                  ## Use before_body block to pre-initialize variables to use in body
         
     | 
| 
      
 1005 
     | 
    
         
            +
                  #
         
     | 
| 
      
 1006 
     | 
    
         
            +
                  #
         
     | 
| 
      
 1007 
     | 
    
         
            +
                  before_body do
         
     | 
| 
      
 1008 
     | 
    
         
            +
                    # Replace example code with your own before_body code
         
     | 
| 
      
 1009 
     | 
    
         
            +
                    default_model_attributes = [:first_name, :last_name, :email]
         
     | 
| 
      
 1010 
     | 
    
         
            +
                    default_model_class = Struct.new(*default_model_attributes)
         
     | 
| 
      
 1011 
     | 
    
         
            +
                    self.model ||= default_model_class.new
         
     | 
| 
      
 1012 
     | 
    
         
            +
                    self.attributes ||= default_model_attributes
         
     | 
| 
      
 1013 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1014 
     | 
    
         
            +
              
         
     | 
| 
      
 1015 
     | 
    
         
            +
                  ## Use after_body block to setup observers for controls in body
         
     | 
| 
      
 1016 
     | 
    
         
            +
                  #
         
     | 
| 
      
 1017 
     | 
    
         
            +
                  # after_body do
         
     | 
| 
      
 1018 
     | 
    
         
            +
                  #
         
     | 
| 
      
 1019 
     | 
    
         
            +
                  # end
         
     | 
| 
      
 1020 
     | 
    
         
            +
              
         
     | 
| 
      
 1021 
     | 
    
         
            +
                  ## Add control content under custom control body
         
     | 
| 
      
 1022 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 1023 
     | 
    
         
            +
                  ## If you want to add a window as the top-most control,
         
     | 
| 
      
 1024 
     | 
    
         
            +
                  ## consider creating a custom window instead
         
     | 
| 
      
 1025 
     | 
    
         
            +
                  ## (Glimmer::LibUI::CustomWindow offers window convenience methods, like show and hide)
         
     | 
| 
      
 1026 
     | 
    
         
            +
                  #
         
     | 
| 
      
 1027 
     | 
    
         
            +
                  body {
         
     | 
| 
      
 1028 
     | 
    
         
            +
                    # Replace example content (model_form custom control) with your own custom control content.
         
     | 
| 
      
 1029 
     | 
    
         
            +
                    form {
         
     | 
| 
      
 1030 
     | 
    
         
            +
                      attributes.each do |attribute|
         
     | 
| 
      
 1031 
     | 
    
         
            +
                        entry { |e|
         
     | 
| 
      
 1032 
     | 
    
         
            +
                          label attribute.to_s.underscore.split('_').map(&:capitalize).join(' ')
         
     | 
| 
      
 1033 
     | 
    
         
            +
                          text <=> [model, attribute]
         
     | 
| 
      
 1034 
     | 
    
         
            +
                        }
         
     | 
| 
      
 1035 
     | 
    
         
            +
                      end
         
     | 
| 
      
 1036 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1037 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1038 
     | 
    
         
            +
              
         
     | 
| 
      
 1039 
     | 
    
         
            +
                end
         
     | 
| 
      
 1040 
     | 
    
         
            +
              end
         
     | 
| 
      
 1041 
     | 
    
         
            +
            end
         
     | 
| 
      
 1042 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1043 
     | 
    
         
            +
             
     | 
| 
      
 1044 
     | 
    
         
            +
            When that file is required in another view (e.g. `require 'common/view/model_form'`), the `model_form` keyword becomes available:
         
     | 
| 
      
 1045 
     | 
    
         
            +
             
     | 
| 
      
 1046 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 1047 
     | 
    
         
            +
            window {
         
     | 
| 
      
 1048 
     | 
    
         
            +
              vertical_box {
         
     | 
| 
      
 1049 
     | 
    
         
            +
                label('Form:')
         
     | 
| 
      
 1050 
     | 
    
         
            +
                model_form(model: some_model, attributes: array_of_attributes)
         
     | 
| 
      
 1051 
     | 
    
         
            +
              }
         
     | 
| 
      
 1052 
     | 
    
         
            +
            }
         
     | 
| 
      
 1053 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1054 
     | 
    
         
            +
             
     | 
| 
      
 1055 
     | 
    
         
            +
            If for whatever reason, you end up with 2 custom control views having the same name with different namespaces, then you can invoke the specific custom control you want by including the Ruby namespace in underscored format separated by double-underscores:
         
     | 
| 
      
 1056 
     | 
    
         
            +
             
     | 
| 
      
 1057 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 1058 
     | 
    
         
            +
            window {
         
     | 
| 
      
 1059 
     | 
    
         
            +
              vertical_box {
         
     | 
| 
      
 1060 
     | 
    
         
            +
                label('Form:')
         
     | 
| 
      
 1061 
     | 
    
         
            +
                common__view__model_form(model: some_model, attributes: array_of_attributes)
         
     | 
| 
      
 1062 
     | 
    
         
            +
              }
         
     | 
| 
      
 1063 
     | 
    
         
            +
            }
         
     | 
| 
      
 1064 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1065 
     | 
    
         
            +
             
     | 
| 
      
 1066 
     | 
    
         
            +
            Or another `model_form` custom control view:
         
     | 
| 
      
 1067 
     | 
    
         
            +
             
     | 
| 
      
 1068 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 1069 
     | 
    
         
            +
            window {
         
     | 
| 
      
 1070 
     | 
    
         
            +
              vertical_box {
         
     | 
| 
      
 1071 
     | 
    
         
            +
                label('Form:')
         
     | 
| 
      
 1072 
     | 
    
         
            +
                hello_world__view__model_form(model: some_model, attributes: array_of_attributes)
         
     | 
| 
      
 1073 
     | 
    
         
            +
              }
         
     | 
| 
      
 1074 
     | 
    
         
            +
            }
         
     | 
| 
      
 1075 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1076 
     | 
    
         
            +
             
     | 
| 
      
 1077 
     | 
    
         
            +
            ### Scaffold Custom Window Gem
         
     | 
| 
      
 1078 
     | 
    
         
            +
             
     | 
| 
      
 1079 
     | 
    
         
            +
            You can scaffold a Ruby gem around a reusable Custom Window by running this command:
         
     | 
| 
      
 1080 
     | 
    
         
            +
             
     | 
| 
      
 1081 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1082 
     | 
    
         
            +
            glimmer scaffold:gem:customwindow[name,namespace]
         
     | 
| 
      
 1083 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1084 
     | 
    
         
            +
             
     | 
| 
      
 1085 
     | 
    
         
            +
            That will generate a custom window gem project under the naming convention: `glimmer-libui-cw-name-namespace`
         
     | 
| 
      
 1086 
     | 
    
         
            +
             
     | 
| 
      
 1087 
     | 
    
         
            +
            The naming convention helps with discoverability of Ruby gems using the command `glimmer list:gems:customwindow[query]` (or alias: `glimmer list:gems:cw[query]`) where filtering `query` is optional.
         
     | 
| 
      
 1088 
     | 
    
         
            +
             
     | 
| 
      
 1089 
     | 
    
         
            +
            The `name` is the custom window class name, which must not contain dashes by convention (multiple words can be concatenated or can use underscores between them).
         
     | 
| 
      
 1090 
     | 
    
         
            +
             
     | 
| 
      
 1091 
     | 
    
         
            +
            The `namespace` is needed to avoid clashing with other custom window gems that other software engineers might have thought of. It is recommended not to include dashes between words in it by convention yet concatenated words or underscores between them.
         
     | 
| 
      
 1092 
     | 
    
         
            +
             
     | 
| 
      
 1093 
     | 
    
         
            +
            Here is a shorter alias for the custom window gem scaffolding command:
         
     | 
| 
      
 1094 
     | 
    
         
            +
             
     | 
| 
      
 1095 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1096 
     | 
    
         
            +
            glimmer scaffold:gem:cw[name,namespace]
         
     | 
| 
      
 1097 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1098 
     | 
    
         
            +
             
     | 
| 
      
 1099 
     | 
    
         
            +
            You can package the newly scaffolded project as a Ruby gem by running this command:
         
     | 
| 
      
 1100 
     | 
    
         
            +
             
     | 
| 
      
 1101 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1102 
     | 
    
         
            +
            glimmer package:gem
         
     | 
| 
      
 1103 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1104 
     | 
    
         
            +
             
     | 
| 
      
 1105 
     | 
    
         
            +
            Or by using the raw rake command:
         
     | 
| 
      
 1106 
     | 
    
         
            +
             
     | 
| 
      
 1107 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1108 
     | 
    
         
            +
            rake build
         
     | 
| 
      
 1109 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1110 
     | 
    
         
            +
             
     | 
| 
      
 1111 
     | 
    
         
            +
            You can generate the application gemspec explicitly if needed with this command (though it is not needed to build the gem):
         
     | 
| 
      
 1112 
     | 
    
         
            +
             
     | 
| 
      
 1113 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1114 
     | 
    
         
            +
            glimmer package:gemspec
         
     | 
| 
      
 1115 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1116 
     | 
    
         
            +
             
     | 
| 
      
 1117 
     | 
    
         
            +
            Or by using the raw rake command:
         
     | 
| 
      
 1118 
     | 
    
         
            +
             
     | 
| 
      
 1119 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1120 
     | 
    
         
            +
            rake gemspec:generate
         
     | 
| 
      
 1121 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1122 
     | 
    
         
            +
             
     | 
| 
      
 1123 
     | 
    
         
            +
            The project optionally allows you to run the custom window as its own separate app with a binary script (`bin/gem_name`) to see it, which helps with prototyping it.
         
     | 
| 
      
 1124 
     | 
    
         
            +
             
     | 
| 
      
 1125 
     | 
    
         
            +
            But, typically consumers of the gem would include it in their own project, which makes the gem keyword available in the Glimmer GUI DSL where `Glimmer`. `Glimmer::LibUI::Application`, `Glimmer::LibUI::CustomWindow`, or `Glimmer::LibUI::CustomControl` is mixed.
         
     | 
| 
      
 1126 
     | 
    
         
            +
             
     | 
| 
      
 1127 
     | 
    
         
            +
            For example:
         
     | 
| 
      
 1128 
     | 
    
         
            +
             
     | 
| 
      
 1129 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 1130 
     | 
    
         
            +
            require 'glimmer-libui-cw-greeter-acme'
         
     | 
| 
      
 1131 
     | 
    
         
            +
             
     | 
| 
      
 1132 
     | 
    
         
            +
            ...
         
     | 
| 
      
 1133 
     | 
    
         
            +
            greeter.show
         
     | 
| 
      
 1134 
     | 
    
         
            +
            ...
         
     | 
| 
      
 1135 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1136 
     | 
    
         
            +
             
     | 
| 
      
 1137 
     | 
    
         
            +
            ### List Custom Window Gems
         
     | 
| 
      
 1138 
     | 
    
         
            +
             
     | 
| 
      
 1139 
     | 
    
         
            +
            Custom window gems are scaffolded to follow the naming convention: `glimmer-libui-cw-name-namespace`
         
     | 
| 
      
 1140 
     | 
    
         
            +
             
     | 
| 
      
 1141 
     | 
    
         
            +
            The naming convention helps with discoverability of Ruby gems using the command:
         
     | 
| 
      
 1142 
     | 
    
         
            +
             
     | 
| 
      
 1143 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1144 
     | 
    
         
            +
            glimmer list:gems:customwindow[query]
         
     | 
| 
      
 1145 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1146 
     | 
    
         
            +
             
     | 
| 
      
 1147 
     | 
    
         
            +
            Or by using the shorter alias:
         
     | 
| 
      
 1148 
     | 
    
         
            +
             
     | 
| 
      
 1149 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1150 
     | 
    
         
            +
            glimmer list:gems:cw[query]
         
     | 
| 
      
 1151 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1152 
     | 
    
         
            +
             
     | 
| 
      
 1153 
     | 
    
         
            +
            The filtering `query` is optional.
         
     | 
| 
      
 1154 
     | 
    
         
            +
             
     | 
| 
      
 1155 
     | 
    
         
            +
            ### List Glimmer DSLs
         
     | 
| 
      
 1156 
     | 
    
         
            +
             
     | 
| 
      
 1157 
     | 
    
         
            +
            Glimmer DSLs can be listed with this command:
         
     | 
| 
      
 1158 
     | 
    
         
            +
             
     | 
| 
      
 1159 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1160 
     | 
    
         
            +
            glimmer list:gems:dsl[query]
         
     | 
| 
      
 1161 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1162 
     | 
    
         
            +
             
     | 
| 
      
 1163 
     | 
    
         
            +
            The filtering `query` is optional.
         
     | 
| 
      
 1164 
     | 
    
         
            +
             
     | 
| 
       885 
1165 
     | 
    
         
             
            ## Girb (Glimmer IRB)
         
     | 
| 
       886 
1166 
     | 
    
         | 
| 
       887 
1167 
     | 
    
         
             
            You can run the `girb` command (`bin/girb` if you cloned the project locally) to do some quick and dirty experimentation and learning:
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0.9. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.9.6
         
     | 
    
        data/glimmer-dsl-libui.gemspec
    CHANGED
    
    | 
         Binary file 
     | 
| 
         @@ -30,25 +30,25 @@ module Glimmer 
     | 
|
| 
       30 
30 
     | 
    
         
             
                    REGEX_GEM_LINE = /^([^\(]+) \(([^\)]+)\)$/
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
                    def custom_control_gems(query=nil)
         
     | 
| 
       33 
     | 
    
         
            -
                      list_gems('glimmer- 
     | 
| 
      
 33 
     | 
    
         
            +
                      list_gems('glimmer-libui-cc-', query) do |result|
         
     | 
| 
       34 
34 
     | 
    
         
             
                        puts
         
     | 
| 
       35 
     | 
    
         
            -
                        puts "  Glimmer Custom Control Gems#{" matching [#{query}]" if query} at rubygems.org:"
         
     | 
| 
      
 35 
     | 
    
         
            +
                        puts "  Glimmer DSL for LibUI Custom Control Gems#{" matching [#{query}]" if query} at rubygems.org:"
         
     | 
| 
       36 
36 
     | 
    
         
             
                        puts result
         
     | 
| 
       37 
37 
     | 
    
         
             
                      end
         
     | 
| 
       38 
38 
     | 
    
         
             
                    end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                    def custom_window_gems(query=nil)
         
     | 
| 
       41 
     | 
    
         
            -
                      list_gems('glimmer- 
     | 
| 
      
 41 
     | 
    
         
            +
                      list_gems('glimmer-libui-cw-', query) do |result|
         
     | 
| 
       42 
42 
     | 
    
         
             
                        puts
         
     | 
| 
       43 
     | 
    
         
            -
                        puts "  Glimmer Custom Window Gems#{" matching [#{query}]" if query} at rubygems.org:"
         
     | 
| 
      
 43 
     | 
    
         
            +
                        puts "  Glimmer DSL for LibUI Custom Window Gems#{" matching [#{query}]" if query} at rubygems.org:"
         
     | 
| 
       44 
44 
     | 
    
         
             
                        puts result
         
     | 
| 
       45 
45 
     | 
    
         
             
                      end
         
     | 
| 
       46 
46 
     | 
    
         
             
                    end
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                    def custom_shape_gems(query=nil)
         
     | 
| 
       49 
     | 
    
         
            -
                      list_gems('glimmer- 
     | 
| 
      
 49 
     | 
    
         
            +
                      list_gems('glimmer-libui-cs-', query) do |result|
         
     | 
| 
       50 
50 
     | 
    
         
             
                        puts
         
     | 
| 
       51 
     | 
    
         
            -
                        puts "  Glimmer Custom Shape Gems#{" matching [#{query}]" if query} at rubygems.org:"
         
     | 
| 
      
 51 
     | 
    
         
            +
                        puts "  Glimmer DSL for LibUI Custom Shape Gems#{" matching [#{query}]" if query} at rubygems.org:"
         
     | 
| 
       52 
52 
     | 
    
         
             
                        puts result
         
     | 
| 
       53 
53 
     | 
    
         
             
                      end
         
     | 
| 
       54 
54 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -155,7 +155,7 @@ module Glimmer 
     | 
|
| 
       155 
155 
     | 
    
         
             
                      mkdir_p "app/#{file_name(app_name)}/model"
         
     | 
| 
       156 
156 
     | 
    
         
             
                      mkdir_p "app/#{file_name(app_name)}/view"
         
     | 
| 
       157 
157 
     | 
    
         
             
                      custom_window(class_name(app_name), current_dir_name, window_type, custom_window_class_name: 'Application')
         
     | 
| 
       158 
     | 
    
         
            -
                       
     | 
| 
      
 158 
     | 
    
         
            +
                      app_model(current_dir_name)
         
     | 
| 
       159 
159 
     | 
    
         | 
| 
       160 
160 
     | 
    
         
             
                      mkdir_p 'icons/windows'
         
     | 
| 
       161 
161 
     | 
    
         
             
                      icon_file = "icons/windows/#{human_name(app_name)}.ico"
         
     | 
| 
         @@ -219,7 +219,7 @@ module Glimmer 
     | 
|
| 
       219 
219 
     | 
    
         
             
                    end
         
     | 
| 
       220 
220 
     | 
    
         | 
| 
       221 
221 
     | 
    
         
             
                    def custom_window_gem(custom_window_name, namespace)
         
     | 
| 
       222 
     | 
    
         
            -
                      gem_name = "glimmer- 
     | 
| 
      
 222 
     | 
    
         
            +
                      gem_name = "glimmer-libui-cw-#{compact_name(custom_window_name)}"
         
     | 
| 
       223 
223 
     | 
    
         
             
                      gem_summary = "#{human_name(custom_window_name)} - Glimmer Custom Window"
         
     | 
| 
       224 
224 
     | 
    
         
             
                      begin
         
     | 
| 
       225 
225 
     | 
    
         
             
                        custom_window_keyword = dsl_control_name(custom_window_name)
         
     | 
| 
         @@ -249,6 +249,7 @@ module Glimmer 
     | 
|
| 
       249 
249 
     | 
    
         
             
                      write 'Rakefile', gem_rakefile(custom_window_name, namespace, gem_name)
         
     | 
| 
       250 
250 
     | 
    
         
             
                      append "lib/#{gem_name}.rb", gem_main_file(custom_window_name, namespace)
         
     | 
| 
       251 
251 
     | 
    
         
             
                      custom_window(custom_window_name, namespace, :gem)
         
     | 
| 
      
 252 
     | 
    
         
            +
                      app_model(current_dir_name, namespace)
         
     | 
| 
       252 
253 
     | 
    
         | 
| 
       253 
254 
     | 
    
         
             
                      mkdir_p "lib/#{gem_name}"
         
     | 
| 
       254 
255 
     | 
    
         
             
                      write "lib/#{gem_name}/launch.rb", gem_launch_file(gem_name, custom_window_name, namespace)
         
     | 
| 
         @@ -291,7 +292,7 @@ module Glimmer 
     | 
|
| 
       291 
292 
     | 
    
         
             
                    end
         
     | 
| 
       292 
293 
     | 
    
         | 
| 
       293 
294 
     | 
    
         
             
                    def custom_control_gem(custom_control_name, namespace)
         
     | 
| 
       294 
     | 
    
         
            -
                      gem_name = "glimmer- 
     | 
| 
      
 295 
     | 
    
         
            +
                      gem_name = "glimmer-libui-cc-#{compact_name(custom_control_name)}"
         
     | 
| 
       295 
296 
     | 
    
         
             
                      gem_summary = "#{human_name(custom_control_name)} - Glimmer Custom Control"
         
     | 
| 
       296 
297 
     | 
    
         
             
                      if namespace
         
     | 
| 
       297 
298 
     | 
    
         
             
                        gem_name += "-#{compact_name(namespace)}"
         
     | 
| 
         @@ -330,7 +331,7 @@ module Glimmer 
     | 
|
| 
       330 
331 
     | 
    
         
             
                    end
         
     | 
| 
       331 
332 
     | 
    
         | 
| 
       332 
333 
     | 
    
         
             
                    def custom_shape_gem(custom_shape_name, namespace)
         
     | 
| 
       333 
     | 
    
         
            -
                      gem_name = "glimmer- 
     | 
| 
      
 334 
     | 
    
         
            +
                      gem_name = "glimmer-libui-cs-#{compact_name(custom_shape_name)}"
         
     | 
| 
       334 
335 
     | 
    
         
             
                      gem_summary = "#{human_name(custom_shape_name)} - Glimmer Custom Shape"
         
     | 
| 
       335 
336 
     | 
    
         
             
                      if namespace
         
     | 
| 
       336 
337 
     | 
    
         
             
                        gem_name += "-#{compact_name(namespace)}"
         
     | 
| 
         @@ -368,7 +369,7 @@ module Glimmer 
     | 
|
| 
       368 
369 
     | 
    
         
             
                      puts 'Run `rake release` to release into rubygems.org once ready.'
         
     | 
| 
       369 
370 
     | 
    
         
             
                    end
         
     | 
| 
       370 
371 
     | 
    
         | 
| 
       371 
     | 
    
         
            -
                    def  
     | 
| 
      
 372 
     | 
    
         
            +
                    def app_model(current_dir_name, namespace = nil)
         
     | 
| 
       372 
373 
     | 
    
         
             
                      model_name = 'Greeting'
         
     | 
| 
       373 
374 
     | 
    
         
             
                      namespace ||= current_dir_name
         
     | 
| 
       374 
375 
     | 
    
         
             
                      root_dir = File.exist?('app') ? 'app' : 'lib'
         
     | 
| 
         @@ -542,7 +543,7 @@ module Glimmer 
     | 
|
| 
       542 
543 
     | 
    
         | 
| 
       543 
544 
     | 
    
         
             
                      if %i[gem app].include?(window_type)
         
     | 
| 
       544 
545 
     | 
    
         
             
                        custom_window_file_content += <<-MULTI_LINE_STRING
         
     | 
| 
       545 
     | 
    
         
            -
            require '#{current_dir_name}/model/greeting'
         
     | 
| 
      
 546 
     | 
    
         
            +
            require '#{window_type == :app ? current_dir_name : namespace}/model/greeting'
         
     | 
| 
       546 
547 
     | 
    
         | 
| 
       547 
548 
     | 
    
         
             
                        MULTI_LINE_STRING
         
     | 
| 
       548 
549 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -579,7 +580,7 @@ require '#{current_dir_name}/model/greeting' 
     | 
|
| 
       579 
580 
     | 
    
         
             
                  #
         
     | 
| 
       580 
581 
     | 
    
         
             
                      MULTI_LINE_STRING
         
     | 
| 
       581 
582 
     | 
    
         | 
| 
       582 
     | 
    
         
            -
                      if  
     | 
| 
      
 583 
     | 
    
         
            +
                      if window_type == :app
         
     | 
| 
       583 
584 
     | 
    
         
             
                        custom_window_file_content += <<-MULTI_LINE_STRING
         
     | 
| 
       584 
585 
     | 
    
         
             
                  before_body do
         
     | 
| 
       585 
586 
     | 
    
         
             
                    @greeting = Model::Greeting.new
         
     | 
| 
         @@ -609,6 +610,12 @@ require '#{current_dir_name}/model/greeting' 
     | 
|
| 
       609 
610 
     | 
    
         
             
                        end
         
     | 
| 
       610 
611 
     | 
    
         
             
                      }
         
     | 
| 
       611 
612 
     | 
    
         
             
                    }
         
     | 
| 
      
 613 
     | 
    
         
            +
                  end
         
     | 
| 
      
 614 
     | 
    
         
            +
                        MULTI_LINE_STRING
         
     | 
| 
      
 615 
     | 
    
         
            +
                      elsif window_type == :gem
         
     | 
| 
      
 616 
     | 
    
         
            +
                        custom_window_file_content += <<-MULTI_LINE_STRING
         
     | 
| 
      
 617 
     | 
    
         
            +
                  before_body do
         
     | 
| 
      
 618 
     | 
    
         
            +
                    @greeting = Model::Greeting.new
         
     | 
| 
       612 
619 
     | 
    
         
             
                  end
         
     | 
| 
       613 
620 
     | 
    
         
             
                        MULTI_LINE_STRING
         
     | 
| 
       614 
621 
     | 
    
         
             
                      else
         
     | 
| 
         @@ -638,12 +645,30 @@ require '#{current_dir_name}/model/greeting' 
     | 
|
| 
       638 
645 
     | 
    
         | 
| 
       639 
646 
     | 
    
         
             
                      margined true
         
     | 
| 
       640 
647 
     | 
    
         | 
| 
       641 
     | 
    
         
            -
                       
     | 
| 
       642 
     | 
    
         
            -
             
     | 
| 
      
 648 
     | 
    
         
            +
                      vertical_box {
         
     | 
| 
      
 649 
     | 
    
         
            +
                      MULTI_LINE_STRING
         
     | 
| 
      
 650 
     | 
    
         
            +
                      
         
     | 
| 
      
 651 
     | 
    
         
            +
                      if window_type == :gem
         
     | 
| 
      
 652 
     | 
    
         
            +
                        custom_window_file_content += <<-MULTI_LINE_STRING
         
     | 
| 
      
 653 
     | 
    
         
            +
                        
         
     | 
| 
      
 654 
     | 
    
         
            +
                        button('Preferences...') {
         
     | 
| 
      
 655 
     | 
    
         
            +
                          stretchy false
         
     | 
| 
      
 656 
     | 
    
         
            +
                          
         
     | 
| 
      
 657 
     | 
    
         
            +
                          on_clicked do
         
     | 
| 
      
 658 
     | 
    
         
            +
                            display_preferences_dialog
         
     | 
| 
      
 659 
     | 
    
         
            +
                          end
         
     | 
| 
      
 660 
     | 
    
         
            +
                        }
         
     | 
| 
      
 661 
     | 
    
         
            +
                        MULTI_LINE_STRING
         
     | 
| 
      
 662 
     | 
    
         
            +
                      end
         
     | 
| 
      
 663 
     | 
    
         
            +
                      
         
     | 
| 
      
 664 
     | 
    
         
            +
                      custom_window_file_content += <<-MULTI_LINE_STRING
         
     | 
| 
      
 665 
     | 
    
         
            +
                        label {
         
     | 
| 
      
 666 
     | 
    
         
            +
                          #{%i[gem app].include?(window_type) ? "text <= [@greeting, :text]" : "text '#{human_name(custom_window_name)}'"}
         
     | 
| 
      
 667 
     | 
    
         
            +
                        }
         
     | 
| 
       643 
668 
     | 
    
         
             
                      }
         
     | 
| 
       644 
669 
     | 
    
         
             
                    }
         
     | 
| 
       645 
670 
     | 
    
         
             
                  }
         
     | 
| 
       646 
     | 
    
         
            -
             
     | 
| 
      
 671 
     | 
    
         
            +
                      MULTI_LINE_STRING
         
     | 
| 
       647 
672 
     | 
    
         | 
| 
       648 
673 
     | 
    
         
             
                      if %i[gem app].include?(window_type)
         
     | 
| 
       649 
674 
     | 
    
         
             
                        custom_window_file_content += <<-MULTI_LINE_STRING
         
     | 
| 
         @@ -704,13 +729,21 @@ end 
     | 
|
| 
       704 
729 
     | 
    
         
             
                  #
         
     | 
| 
       705 
730 
     | 
    
         
             
                  # options :custom_text, :background_color
         
     | 
| 
       706 
731 
     | 
    
         
             
                  # option :foreground_color, default: :red
         
     | 
| 
      
 732 
     | 
    
         
            +
                  
         
     | 
| 
      
 733 
     | 
    
         
            +
                  # Replace example options with your own options
         
     | 
| 
      
 734 
     | 
    
         
            +
                  option :model
         
     | 
| 
      
 735 
     | 
    
         
            +
                  option :attributes
         
     | 
| 
       707 
736 
     | 
    
         | 
| 
       708 
737 
     | 
    
         
             
                  ## Use before_body block to pre-initialize variables to use in body
         
     | 
| 
       709 
738 
     | 
    
         
             
                  #
         
     | 
| 
       710 
739 
     | 
    
         
             
                  #
         
     | 
| 
       711 
     | 
    
         
            -
                   
     | 
| 
       712 
     | 
    
         
            -
             
     | 
| 
       713 
     | 
    
         
            -
             
     | 
| 
      
 740 
     | 
    
         
            +
                  before_body do
         
     | 
| 
      
 741 
     | 
    
         
            +
                    # Replace example code with your own before_body code
         
     | 
| 
      
 742 
     | 
    
         
            +
                    default_model_attributes = [:first_name, :last_name, :email]
         
     | 
| 
      
 743 
     | 
    
         
            +
                    default_model_class = Struct.new(*default_model_attributes)
         
     | 
| 
      
 744 
     | 
    
         
            +
                    self.model ||= default_model_class.new
         
     | 
| 
      
 745 
     | 
    
         
            +
                    self.attributes ||= default_model_attributes
         
     | 
| 
      
 746 
     | 
    
         
            +
                  end
         
     | 
| 
       714 
747 
     | 
    
         | 
| 
       715 
748 
     | 
    
         
             
                  ## Use after_body block to setup observers for controls in body
         
     | 
| 
       716 
749 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -725,9 +758,14 @@ end 
     | 
|
| 
       725 
758 
     | 
    
         
             
                  ## (Glimmer::LibUI::CustomWindow offers window convenience methods, like show and hide)
         
     | 
| 
       726 
759 
     | 
    
         
             
                  #
         
     | 
| 
       727 
760 
     | 
    
         
             
                  body {
         
     | 
| 
       728 
     | 
    
         
            -
                    # Replace example content  
     | 
| 
       729 
     | 
    
         
            -
                     
     | 
| 
       730 
     | 
    
         
            -
                       
     | 
| 
      
 761 
     | 
    
         
            +
                    # Replace example content (model_form custom control) with your own custom control content.
         
     | 
| 
      
 762 
     | 
    
         
            +
                    form {
         
     | 
| 
      
 763 
     | 
    
         
            +
                      attributes.each do |attribute|
         
     | 
| 
      
 764 
     | 
    
         
            +
                        entry { |e|
         
     | 
| 
      
 765 
     | 
    
         
            +
                          label attribute.to_s.underscore.split('_').map(&:capitalize).join(' ')
         
     | 
| 
      
 766 
     | 
    
         
            +
                          text <=> [model, attribute]
         
     | 
| 
      
 767 
     | 
    
         
            +
                        }
         
     | 
| 
      
 768 
     | 
    
         
            +
                      end
         
     | 
| 
       731 
769 
     | 
    
         
             
                    }
         
     | 
| 
       732 
770 
     | 
    
         
             
                  }
         
     | 
| 
       733 
771 
     | 
    
         | 
    
        data/lib/glimmer/rake_task.rb
    CHANGED
    
    | 
         @@ -103,16 +103,16 @@ namespace :glimmer do 
     | 
|
| 
       103 
103 
     | 
    
         
             
                task :cw, [:name, :namespace] => :customwindow
         
     | 
| 
       104 
104 
     | 
    
         
             
                task :custom_window, [:name, :namespace] => :customwindow
         
     | 
| 
       105 
105 
     | 
    
         
             
                task :"custom-window", [:name, :namespace] => :customwindow
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                desc 'Scaffold Glimmer::UI::CustomControl subclass (part of a view) under app/views (namespace is optional) [alt: scaffold:cc]'
         
     | 
| 
      
 108 
     | 
    
         
            +
                task :customcontrol, [:name, :namespace] do |t, args|
         
     | 
| 
      
 109 
     | 
    
         
            +
                  require_relative 'rake_task/scaffold'
         
     | 
| 
      
 110 
     | 
    
         
            +
                  Glimmer::RakeTask::Scaffold.custom_control(args[:name], args[:namespace])
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                task :cc, [:name, :namespace] => :customcontrol
         
     | 
| 
      
 114 
     | 
    
         
            +
                task :custom_control, [:name, :namespace] => :customcontrol
         
     | 
| 
      
 115 
     | 
    
         
            +
                task :"custom-control", [:name, :namespace] => :customcontrol
         
     | 
| 
       116 
116 
     | 
    
         
             
            #
         
     | 
| 
       117 
117 
     | 
    
         
             
            #     desc 'Scaffold Glimmer::UI::CustomShape subclass (part of a view) under app/views (namespace is optional) [alt: scaffold:cs]'
         
     | 
| 
       118 
118 
     | 
    
         
             
            #     task :customshape, [:name, :namespace] do |t, args|
         
     | 
| 
         @@ -124,16 +124,16 @@ namespace :glimmer do 
     | 
|
| 
       124 
124 
     | 
    
         
             
            #     task :custom_shape, [:name, :namespace] => :customshape
         
     | 
| 
       125 
125 
     | 
    
         
             
            #     task :"custom-shape", [:name, :namespace] => :customshape
         
     | 
| 
       126 
126 
     | 
    
         
             
            #
         
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
      
 127 
     | 
    
         
            +
                namespace :gem do
         
     | 
| 
      
 128 
     | 
    
         
            +
                  desc 'Scaffold Glimmer::UI::CustomWindow subclass (full window view) under its own Ruby gem + app project (namespace is required) [alt: scaffold:gem:cw]'
         
     | 
| 
      
 129 
     | 
    
         
            +
                  task :customwindow, [:name, :namespace] do |t, args|
         
     | 
| 
      
 130 
     | 
    
         
            +
                    require_relative 'rake_task/scaffold'
         
     | 
| 
      
 131 
     | 
    
         
            +
                    Glimmer::RakeTask::Scaffold.custom_window_gem(args[:name], args[:namespace])
         
     | 
| 
      
 132 
     | 
    
         
            +
                  end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                  task :cw, [:name, :namespace] => :customwindow
         
     | 
| 
      
 135 
     | 
    
         
            +
                  task :custom_window, [:name, :namespace] => :customwindow
         
     | 
| 
      
 136 
     | 
    
         
            +
                  task :"custom-window", [:name, :namespace] => :customwindow
         
     | 
| 
       137 
137 
     | 
    
         
             
            #
         
     | 
| 
       138 
138 
     | 
    
         
             
            #       desc 'Scaffold Glimmer::UI::CustomControl subclass (part of a view) under its own Ruby gem project (namespace is required) [alt: scaffold:gem:cc]'
         
     | 
| 
       139 
139 
     | 
    
         
             
            #       task :customcontrol, [:name, :namespace] do |t, args|
         
     | 
| 
         @@ -154,11 +154,7 @@ namespace :glimmer do 
     | 
|
| 
       154 
154 
     | 
    
         
             
            #       task :cs, [:name, :namespace] => :customshape
         
     | 
| 
       155 
155 
     | 
    
         
             
            #       task :custom_shape, [:name, :namespace] => :customshape
         
     | 
| 
       156 
156 
     | 
    
         
             
            #       task :"custom-shape", [:name, :namespace] => :customshape
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
            #
         
     | 
| 
       159 
     | 
    
         
            -
            #     task :custom_window_gem, [:name, :namespace] => 'gem:customwindow'
         
     | 
| 
       160 
     | 
    
         
            -
            #     task :custom_control_gem, [:name, :namespace] => 'gem:customcontrol'
         
     | 
| 
       161 
     | 
    
         
            -
            #     task :custom_shape_gem, [:name, :namespace] => 'gem:customshape'
         
     | 
| 
      
 157 
     | 
    
         
            +
                end
         
     | 
| 
       162 
158 
     | 
    
         
             
              end
         
     | 
| 
       163 
159 
     | 
    
         | 
| 
       164 
160 
     | 
    
         
             
              namespace :list do
         
     | 
| 
         @@ -198,13 +194,6 @@ namespace :glimmer do 
     | 
|
| 
       198 
194 
     | 
    
         
             
                  task :dsl, [:query] => :list_require do |t, args|
         
     | 
| 
       199 
195 
     | 
    
         
             
                    Glimmer::RakeTask::List.dsl_gems(args[:query])
         
     | 
| 
       200 
196 
     | 
    
         
             
                  end
         
     | 
| 
       201 
     | 
    
         
            -
                
         
     | 
| 
       202 
197 
     | 
    
         
             
                end
         
     | 
| 
       203 
     | 
    
         
            -
                
         
     | 
| 
       204 
     | 
    
         
            -
                # legacy support
         
     | 
| 
       205 
     | 
    
         
            -
                
         
     | 
| 
       206 
     | 
    
         
            -
                task :custom_window_gems, [:name, :namespace] => 'gems:customwindow'
         
     | 
| 
       207 
     | 
    
         
            -
                task :custom_control_gems, [:name, :namespace] => 'gems:customcontrol'
         
     | 
| 
       208 
     | 
    
         
            -
                
         
     | 
| 
       209 
198 
     | 
    
         
             
              end
         
     | 
| 
       210 
199 
     | 
    
         
             
            end
         
     |