glimmer 0.3.5 → 0.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/README.markdown +94 -32
 - data/lib/glimmer.rb +4 -6
 - data/lib/glimmer/command_handler.rb +10 -0
 - data/lib/glimmer/command_handler_chain_factory.rb +32 -0
 - data/lib/glimmer/command_handler_chain_link.rb +21 -0
 - data/lib/{command_handlers.rb → glimmer/command_handlers.rb} +21 -17
 - data/lib/glimmer/command_handlers/bind_command_handler.rb +51 -0
 - data/lib/glimmer/command_handlers/color_command_handler.rb +26 -0
 - data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +40 -0
 - data/lib/glimmer/command_handlers/data_binding_command_handler.rb +69 -0
 - data/lib/glimmer/command_handlers/display_command_handler.rb +16 -0
 - data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +45 -0
 - data/lib/glimmer/command_handlers/models/g_color.rb +34 -0
 - data/lib/glimmer/command_handlers/models/g_display.rb +26 -0
 - data/lib/glimmer/command_handlers/models/g_font.rb +62 -0
 - data/lib/glimmer/command_handlers/models/g_runnable.rb +13 -0
 - data/lib/glimmer/command_handlers/models/g_shell.rb +27 -0
 - data/lib/glimmer/command_handlers/models/g_swt.rb +22 -0
 - data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +33 -0
 - data/lib/glimmer/command_handlers/models/g_widget.rb +199 -0
 - data/lib/glimmer/command_handlers/models/g_widget_listener.rb +11 -0
 - data/lib/glimmer/command_handlers/models/list_selection_binding.rb +47 -0
 - data/lib/glimmer/command_handlers/models/model_binding.rb +206 -0
 - data/lib/glimmer/command_handlers/models/observable.rb +11 -0
 - data/lib/glimmer/command_handlers/models/observable_array.rb +104 -0
 - data/lib/glimmer/command_handlers/models/observable_model.rb +105 -0
 - data/lib/glimmer/command_handlers/models/observer.rb +115 -0
 - data/lib/glimmer/command_handlers/models/table_items_binding.rb +45 -0
 - data/lib/glimmer/command_handlers/models/tree_items_binding.rb +49 -0
 - data/lib/glimmer/command_handlers/models/widget_binding.rb +29 -0
 - data/lib/glimmer/command_handlers/shell_command_handler.rb +17 -0
 - data/lib/glimmer/command_handlers/tab_item_command_handler.rb +21 -0
 - data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +25 -0
 - data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +30 -0
 - data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +29 -0
 - data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +25 -0
 - data/lib/glimmer/command_handlers/widget_command_handler.rb +22 -0
 - data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +39 -0
 - data/lib/glimmer/command_handlers/widget_method_command_handler.rb +21 -0
 - data/lib/glimmer/parent.rb +7 -0
 - data/lib/{shine.rb → glimmer/shine.rb} +1 -1
 - data/lib/glimmer/swt_packages.rb +13 -0
 - data/lib/{xml_command_handlers.rb → glimmer/xml_command_handlers.rb} +10 -8
 - data/lib/glimmer/xml_command_handlers/html_command_handler.rb +47 -0
 - data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +19 -0
 - data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +20 -0
 - data/lib/glimmer/xml_command_handlers/models/node.rb +82 -0
 - data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +11 -0
 - data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +61 -0
 - data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +20 -0
 - data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +33 -0
 - data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +25 -0
 - data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +21 -0
 - metadata +53 -54
 - data/lib/command_handler.rb +0 -8
 - data/lib/command_handler_chain_factory.rb +0 -30
 - data/lib/command_handler_chain_link.rb +0 -19
 - data/lib/command_handlers/bind_command_handler.rb +0 -49
 - data/lib/command_handlers/color_command_handler.rb +0 -24
 - data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +0 -38
 - data/lib/command_handlers/data_binding_command_handler.rb +0 -67
 - data/lib/command_handlers/list_selection_data_binding_command_handler.rb +0 -43
 - data/lib/command_handlers/models/block_observer.rb +0 -14
 - data/lib/command_handlers/models/list_selection_binding.rb +0 -45
 - data/lib/command_handlers/models/model_binding.rb +0 -205
 - data/lib/command_handlers/models/observable.rb +0 -9
 - data/lib/command_handlers/models/observable_array.rb +0 -102
 - data/lib/command_handlers/models/observable_model.rb +0 -103
 - data/lib/command_handlers/models/observer.rb +0 -88
 - data/lib/command_handlers/models/r_color.rb +0 -32
 - data/lib/command_handlers/models/r_font.rb +0 -60
 - data/lib/command_handlers/models/r_runnable.rb +0 -11
 - data/lib/command_handlers/models/r_shell.rb +0 -24
 - data/lib/command_handlers/models/r_swt.rb +0 -18
 - data/lib/command_handlers/models/r_tab_item_composite.rb +0 -31
 - data/lib/command_handlers/models/r_widget.rb +0 -183
 - data/lib/command_handlers/models/r_widget_listener.rb +0 -9
 - data/lib/command_handlers/models/table_items_binding.rb +0 -43
 - data/lib/command_handlers/models/tree_items_binding.rb +0 -47
 - data/lib/command_handlers/models/widget_binding.rb +0 -27
 - data/lib/command_handlers/shell_command_handler.rb +0 -15
 - data/lib/command_handlers/tab_item_command_handler.rb +0 -19
 - data/lib/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -23
 - data/lib/command_handlers/table_items_data_binding_command_handler.rb +0 -28
 - data/lib/command_handlers/tree_items_data_binding_command_handler.rb +0 -27
 - data/lib/command_handlers/tree_properties_data_binding_command_handler.rb +0 -23
 - data/lib/command_handlers/widget_command_handler.rb +0 -20
 - data/lib/command_handlers/widget_listener_command_handler.rb +0 -37
 - data/lib/command_handlers/widget_method_command_handler.rb +0 -19
 - data/lib/parent.rb +0 -5
 - data/lib/string.rb +0 -8
 - data/lib/swt_packages.rb +0 -11
 - data/lib/symbol.rb +0 -10
 - data/lib/xml_command_handlers/html_command_handler.rb +0 -45
 - data/lib/xml_command_handlers/models/depth_first_search_iterator.rb +0 -17
 - data/lib/xml_command_handlers/models/name_space_visitor.rb +0 -18
 - data/lib/xml_command_handlers/models/node.rb +0 -80
 - data/lib/xml_command_handlers/models/node_visitor.rb +0 -9
 - data/lib/xml_command_handlers/models/xml_visitor.rb +0 -59
 - data/lib/xml_command_handlers/xml_command_handler.rb +0 -18
 - data/lib/xml_command_handlers/xml_name_space_command_handler.rb +0 -31
 - data/lib/xml_command_handlers/xml_tag_command_handler.rb +0 -23
 - data/lib/xml_command_handlers/xml_text_command_handler.rb +0 -19
 
| 
         @@ -0,0 +1,69 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/../command_handler"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/g_widget"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/observable_model"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/model_binding"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/widget_binding"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 8 
     | 
    
         
            +
              # Responsible for wiring two-way data-binding for text and selection properties
         
     | 
| 
      
 9 
     | 
    
         
            +
              # on Text, Button, and Spinner widgets.
         
     | 
| 
      
 10 
     | 
    
         
            +
              # Does so by using the output of the bind(model, property) command in the form
         
     | 
| 
      
 11 
     | 
    
         
            +
              # of a ModelBinding, which is then connected to an anonymous widget observer
         
     | 
| 
      
 12 
     | 
    
         
            +
              # (aka widget_data_binder as per widget_data_binders array)
         
     | 
| 
      
 13 
     | 
    
         
            +
              #
         
     | 
| 
      
 14 
     | 
    
         
            +
              # Depends on BindCommandHandler
         
     | 
| 
      
 15 
     | 
    
         
            +
              class DataBindingCommandHandler
         
     | 
| 
      
 16 
     | 
    
         
            +
                extend Glimmer
         
     | 
| 
      
 17 
     | 
    
         
            +
                include CommandHandler
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                include_package 'org.eclipse.swt.widgets'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                @@widget_data_binders = {
         
     | 
| 
      
 22 
     | 
    
         
            +
                  Java::OrgEclipseSwtWidgets::Text => {
         
     | 
| 
      
 23 
     | 
    
         
            +
                    :text => Proc.new do |g_widget, model_binding|
         
     | 
| 
      
 24 
     | 
    
         
            +
                      add_contents(g_widget) {
         
     | 
| 
      
 25 
     | 
    
         
            +
                        on_modify_text { |modify_event|
         
     | 
| 
      
 26 
     | 
    
         
            +
                          model_binding.call(g_widget.widget.getText)
         
     | 
| 
      
 27 
     | 
    
         
            +
                        }
         
     | 
| 
      
 28 
     | 
    
         
            +
                      }
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end,
         
     | 
| 
      
 30 
     | 
    
         
            +
                  },
         
     | 
| 
      
 31 
     | 
    
         
            +
                  Java::OrgEclipseSwtWidgets::Button => {
         
     | 
| 
      
 32 
     | 
    
         
            +
                    :selection => Proc.new do |g_widget, model_binding|
         
     | 
| 
      
 33 
     | 
    
         
            +
                      add_contents(g_widget) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                        on_widget_selected { |selection_event|
         
     | 
| 
      
 35 
     | 
    
         
            +
                          model_binding.call(g_widget.widget.getSelection)
         
     | 
| 
      
 36 
     | 
    
         
            +
                        }
         
     | 
| 
      
 37 
     | 
    
         
            +
                      }
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
                  },
         
     | 
| 
      
 40 
     | 
    
         
            +
                  Java::OrgEclipseSwtWidgets::Spinner => {
         
     | 
| 
      
 41 
     | 
    
         
            +
                    :selection => Proc.new do |g_widget, model_binding|
         
     | 
| 
      
 42 
     | 
    
         
            +
                      add_contents(g_widget) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                        on_widget_selected { |selection_event|
         
     | 
| 
      
 44 
     | 
    
         
            +
                          model_binding.call(g_widget.widget.getSelection)
         
     | 
| 
      
 45 
     | 
    
         
            +
                        }
         
     | 
| 
      
 46 
     | 
    
         
            +
                      }
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  }
         
     | 
| 
      
 49 
     | 
    
         
            +
                }
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                def can_handle?(parent, command_symbol, *args, &block)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  (parent.is_a?(GWidget) and
         
     | 
| 
      
 53 
     | 
    
         
            +
                  args.size == 1 and
         
     | 
| 
      
 54 
     | 
    
         
            +
                  args[0].is_a?(ModelBinding))
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def do_handle(parent, command_symbol, *args, &block)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  model_binding = args[0]
         
     | 
| 
      
 59 
     | 
    
         
            +
                  widget_binding_parameters = [parent, command_symbol.to_s]
         
     | 
| 
      
 60 
     | 
    
         
            +
                  widget_binding = WidgetBinding.new(*widget_binding_parameters)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  widget_binding.call(model_binding.evaluate_property)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  widget_binding.observe(model_binding)
         
     | 
| 
      
 63 
     | 
    
         
            +
                  widget_data_binder_map = @@widget_data_binders[parent.widget.class]
         
     | 
| 
      
 64 
     | 
    
         
            +
                  widget_data_binder = widget_data_binder_map[command_symbol.to_s.to_sym] if widget_data_binder_map
         
     | 
| 
      
 65 
     | 
    
         
            +
                  widget_data_binder.call(parent, model_binding) if widget_data_binder
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/../command_handler"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/g_display"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 5 
     | 
    
         
            +
              class DisplayCommandHandler
         
     | 
| 
      
 6 
     | 
    
         
            +
                include CommandHandler
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def can_handle?(parent, command_symbol, *args, &block)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  command_symbol.to_s == "display"
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def do_handle(parent, command_symbol, *args, &block)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  GDisplay.instance(*args)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/../command_handler"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/g_widget"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/models/list_selection_binding"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 6 
     | 
    
         
            +
              class ListSelectionDataBindingCommandHandler
         
     | 
| 
      
 7 
     | 
    
         
            +
                include CommandHandler
         
     | 
| 
      
 8 
     | 
    
         
            +
                include Glimmer
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                include_package 'org.eclipse.swt.widgets'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def can_handle?(parent, command_symbol, *args, &block)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  parent.is_a?(GWidget) and
         
     | 
| 
      
 14 
     | 
    
         
            +
                  parent.widget.is_a?(List) and
         
     | 
| 
      
 15 
     | 
    
         
            +
                  command_symbol.to_s == "selection" and
         
     | 
| 
      
 16 
     | 
    
         
            +
                  args.size == 1 and
         
     | 
| 
      
 17 
     | 
    
         
            +
                  args[0].is_a?(ModelBinding) and
         
     | 
| 
      
 18 
     | 
    
         
            +
                  args[0].evaluate_options_property.is_a?(Array) and
         
     | 
| 
      
 19 
     | 
    
         
            +
                  block == nil
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def do_handle(parent, command_symbol, *args, &block)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  model_binding = args[0]
         
     | 
| 
      
 24 
     | 
    
         
            +
                  widget_binding = WidgetBinding.new(parent, "items")
         
     | 
| 
      
 25 
     | 
    
         
            +
                  widget_binding.call(model_binding.evaluate_options_property)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  model = model_binding.base_model
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #TODO make this options observer dependent and all similar observers in widget specific data binding handlers
         
     | 
| 
      
 28 
     | 
    
         
            +
                  widget_binding.observe(model, model_binding.options_property_name)
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  property_type = :string
         
     | 
| 
      
 31 
     | 
    
         
            +
                  property_type = :array if parent.has_style?(:multi)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  list_selection_binding = ListSelectionBinding.new(parent, property_type)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  list_selection_binding.call(model_binding.evaluate_property)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  #TODO check if nested data binding works for list widget and other widgets that need custom data binding
         
     | 
| 
      
 35 
     | 
    
         
            +
                  list_selection_binding.observe(model, model_binding.property_name_expression)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  add_contents(parent) {
         
     | 
| 
      
 38 
     | 
    
         
            +
                    on_widget_selected {
         
     | 
| 
      
 39 
     | 
    
         
            +
                      model_binding.call(list_selection_binding.evaluate_property)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    }
         
     | 
| 
      
 41 
     | 
    
         
            +
                  }
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'g_swt'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 4 
     | 
    
         
            +
              class GColor
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :display, :red, :green, :blue, :alpha
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                include_package 'org.eclipse.swt.graphics'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 10 
     | 
    
         
            +
                  include_package 'org.eclipse.swt'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def for(display, standard_color)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    display.getSystemColor(GSWT[standard_color])
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def initialize(display, red, green, blue, alpha = nil)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @display = display
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @red = red
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @green = green
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @blue = blue
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @alpha = alpha
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def color
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @color ||= Color.new(@display, *[@red, @green, @blue, @alpha].compact)
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def display=(a_display)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @display = a_display
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @color = nil
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 2 
     | 
    
         
            +
              # Wrapper around SWT Display
         
     | 
| 
      
 3 
     | 
    
         
            +
              class GDisplay
         
     | 
| 
      
 4 
     | 
    
         
            +
                include_package 'org.eclipse.swt.widgets'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def instance(*args)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    if @instance.nil? || @instance.display.isDisposed
         
     | 
| 
      
 9 
     | 
    
         
            +
                      @instance = GDisplay.new(*args)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    end
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @instance
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                # SWT Display object wrapped
         
     | 
| 
      
 16 
     | 
    
         
            +
                attr_reader :display
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def initialize(*args)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @display = Display.new(*args)
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def dispose
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @display.dispose
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,62 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'g_swt'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 4 
     | 
    
         
            +
              class GFont
         
     | 
| 
      
 5 
     | 
    
         
            +
                include_package 'org.eclipse.swt.graphics'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                extend Glimmer
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :g_widget
         
     | 
| 
      
 10 
     | 
    
         
            +
                attr_accessor :display
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 13 
     | 
    
         
            +
                  def for(g_widget)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @instances ||= {}
         
     | 
| 
      
 15 
     | 
    
         
            +
                    unless @instances[g_widget]
         
     | 
| 
      
 16 
     | 
    
         
            +
                      @instances[g_widget] = new(g_widget)
         
     | 
| 
      
 17 
     | 
    
         
            +
                      add_contents(g_widget) {
         
     | 
| 
      
 18 
     | 
    
         
            +
                        on_widget_disposed { |dispose_event|
         
     | 
| 
      
 19 
     | 
    
         
            +
                          @instances.delete(g_widget)
         
     | 
| 
      
 20 
     | 
    
         
            +
                        }
         
     | 
| 
      
 21 
     | 
    
         
            +
                      }
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @instances[g_widget]
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def initialize(g_widget, display = nil)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @g_widget = g_widget
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @display = display || @g_widget.widget.display
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def g_widget=(a_widget)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  @g_widget = a_widget
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @font_datum = nil
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def font_datum
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @font_datum ||= @g_widget.widget.getFont.getFontData[0]
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def name
         
     | 
| 
      
 42 
     | 
    
         
            +
                  font_datum.getName
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def height
         
     | 
| 
      
 46 
     | 
    
         
            +
                  font_datum.getHeight
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def style
         
     | 
| 
      
 50 
     | 
    
         
            +
                  font_datum.getStyle
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def font(font_properties)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  font_properties[:style] = GSWT[*font_properties[:style]]
         
     | 
| 
      
 55 
     | 
    
         
            +
                  font_data_args = [:name, :height, :style].map do |font_property_name|
         
     | 
| 
      
 56 
     | 
    
         
            +
                    font_properties[font_property_name] || send(font_property_name)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                  font_datum = FontData.new(*font_data_args)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  Font.new(@display, font_datum)
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'g_widget'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'g_display'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 5 
     | 
    
         
            +
              class GShell < GWidget
         
     | 
| 
      
 6 
     | 
    
         
            +
                include_package 'org.eclipse.swt.layout'
         
     | 
| 
      
 7 
     | 
    
         
            +
                include_package 'org.eclipse.swt.widgets'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                attr_reader :display
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def initialize(display = GDisplay.instance.display)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @display = display
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @widget = Shell.new(@display)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @widget.setLayout(FillLayout.new)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def open
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @widget.pack
         
     | 
| 
      
 19 
     | 
    
         
            +
                  @widget.open
         
     | 
| 
      
 20 
     | 
    
         
            +
                  until @widget.isDisposed
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @display.sleep unless @display.readAndDispatch
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @display.dispose
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 2 
     | 
    
         
            +
              class GSWT
         
     | 
| 
      
 3 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 4 
     | 
    
         
            +
                  java_import 'org.eclipse.swt.SWT'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  # Gets SWT constants as if calling SWT::CONSTANT where constant is
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # passed in as a lower case symbol
         
     | 
| 
      
 8 
     | 
    
         
            +
                  def [](*symbols)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    symbols.compact.reduce(0) { |output, symbol| output | constant(symbol) }
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def constant(symbol)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    return symbol if symbol.is_a?(Integer)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    swt_constant_symbol = symbol.to_s.upcase.to_sym
         
     | 
| 
      
 15 
     | 
    
         
            +
                    SWT.const_get(swt_constant_symbol)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 17 
     | 
    
         
            +
                    swt_constant_symbol = SWT.constants.find {|c| c.to_s.upcase == swt_constant_symbol.to_s}
         
     | 
| 
      
 18 
     | 
    
         
            +
                    SWT.const_get(swt_constant_symbol)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/g_widget_listener"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.dirname(__FILE__) + "/g_runnable"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 5 
     | 
    
         
            +
              class GTabItemComposite < GWidget
         
     | 
| 
      
 6 
     | 
    
         
            +
                include_package 'org.eclipse.swt.widgets'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                attr_reader :tab_item
         
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(tab_item, parent, style, &contents)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  super("composite", parent, style, &contents)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @tab_item = tab_item
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @tab_item.widget.control = self.widget
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def has_attribute?(attribute_name, *args)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  if attribute_name.to_s == "text"
         
     | 
| 
      
 17 
     | 
    
         
            +
                    true
         
     | 
| 
      
 18 
     | 
    
         
            +
                  else
         
     | 
| 
      
 19 
     | 
    
         
            +
                    super(attribute_name, *args)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def set_attribute(attribute_name, *args)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  if attribute_name.to_s == "text"
         
     | 
| 
      
 25 
     | 
    
         
            +
                    text_value = args[0]
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @tab_item.widget.text = text_value
         
     | 
| 
      
 27 
     | 
    
         
            +
                  else
         
     | 
| 
      
 28 
     | 
    
         
            +
                    super(attribute_name, *args)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,199 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'g_widget_listener'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'g_runnable'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative 'g_color'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'g_font'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'g_swt'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Glimmer
         
     | 
| 
      
 8 
     | 
    
         
            +
              class GWidget
         
     | 
| 
      
 9 
     | 
    
         
            +
                include_package 'org.eclipse.swt'
         
     | 
| 
      
 10 
     | 
    
         
            +
                include_package 'org.eclipse.swt.widgets'
         
     | 
| 
      
 11 
     | 
    
         
            +
                include_package 'org.eclipse.swt.layout'
         
     | 
| 
      
 12 
     | 
    
         
            +
                include_package 'org.eclipse.swt.graphics'
         
     | 
| 
      
 13 
     | 
    
         
            +
                include Parent
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                attr_reader :widget
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                #TODO externalize
         
     | 
| 
      
 18 
     | 
    
         
            +
                @@default_styles = {
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "text" => GSWT[:border],
         
     | 
| 
      
 20 
     | 
    
         
            +
                  "table" => GSWT[:border],
         
     | 
| 
      
 21 
     | 
    
         
            +
                  "spinner" => GSWT[:border],
         
     | 
| 
      
 22 
     | 
    
         
            +
                  "list" => GSWT[:border, :v_scroll],
         
     | 
| 
      
 23 
     | 
    
         
            +
                  "button" => GSWT[:push],
         
     | 
| 
      
 24 
     | 
    
         
            +
                }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                #TODO externalize
         
     | 
| 
      
 27 
     | 
    
         
            +
                @@default_initializers = {
         
     | 
| 
      
 28 
     | 
    
         
            +
                  "composite" => Proc.new {|composite| composite.setLayout(GridLayout.new) },
         
     | 
| 
      
 29 
     | 
    
         
            +
                  "table" => Proc.new do |table|
         
     | 
| 
      
 30 
     | 
    
         
            +
                    table.setHeaderVisible(true)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    table.setLinesVisible(true)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end,
         
     | 
| 
      
 33 
     | 
    
         
            +
                  "table_column" => Proc.new { |table_column| table_column.setWidth(80) },
         
     | 
| 
      
 34 
     | 
    
         
            +
                  "group" => Proc.new {|group| group.setLayout(GridLayout.new) },
         
     | 
| 
      
 35 
     | 
    
         
            +
                }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                #styles is a comma separate list of symbols representing SWT styles in lower case
         
     | 
| 
      
 38 
     | 
    
         
            +
                def initialize(underscored_widget_name, parent, styles, &contents)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @widget = self.class.swt_widget_class_for(underscored_widget_name).new(parent, style(underscored_widget_name, styles))
         
     | 
| 
      
 40 
     | 
    
         
            +
                  @@default_initializers[underscored_widget_name].call(@widget) if @@default_initializers[underscored_widget_name]
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def has_attribute?(attribute_name, *args)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @widget.respond_to?(attribute_setter(attribute_name), args)
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def set_attribute(attribute_name, *args)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  apply_property_type_converters(attribute_name, args)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @widget.send(attribute_setter(attribute_name), *args)
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                def property_type_converters
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @property_type_converters ||= {
         
     | 
| 
      
 54 
     | 
    
         
            +
                    :text => Proc.new { |value| value.to_s },
         
     | 
| 
      
 55 
     | 
    
         
            +
                    :items => Proc.new { |value| value.to_java :string},
         
     | 
| 
      
 56 
     | 
    
         
            +
                    :visible => Proc.new { |value| !!value},
         
     | 
| 
      
 57 
     | 
    
         
            +
                    :font => Proc.new do |value|
         
     | 
| 
      
 58 
     | 
    
         
            +
                      if value.is_a?(Hash)
         
     | 
| 
      
 59 
     | 
    
         
            +
                        font_properties = value
         
     | 
| 
      
 60 
     | 
    
         
            +
                        GFont.for(self).font(font_properties)
         
     | 
| 
      
 61 
     | 
    
         
            +
                      else
         
     | 
| 
      
 62 
     | 
    
         
            +
                        value
         
     | 
| 
      
 63 
     | 
    
         
            +
                      end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end,
         
     | 
| 
      
 65 
     | 
    
         
            +
                  }
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def apply_property_type_converters(attribute_name, args)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  if args.count == 1
         
     | 
| 
      
 70 
     | 
    
         
            +
                    value = args.first
         
     | 
| 
      
 71 
     | 
    
         
            +
                    converter = property_type_converters[attribute_name.to_sym]
         
     | 
| 
      
 72 
     | 
    
         
            +
                    args[0] = converter.call(value) if converter
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                  if args.count == 1 && (args.first.is_a?(Symbol) || args.first.is_a?(String)) && args.first.to_s.start_with?('color_')
         
     | 
| 
      
 75 
     | 
    
         
            +
                    standard_color = args.first
         
     | 
| 
      
 76 
     | 
    
         
            +
                    args[0] = GColor.for(widget.getDisplay, standard_color)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  elsif args.count == 1 && args.first.is_a?(GColor)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    g_color = args.first
         
     | 
| 
      
 79 
     | 
    
         
            +
                    g_color.display = widget.display if g_color.display.nil? || g_color.display != widget.display
         
     | 
| 
      
 80 
     | 
    
         
            +
                    args[0] = g_color.color
         
     | 
| 
      
 81 
     | 
    
         
            +
                  end
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                def self.widget_exists?(underscored_widget_name)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 86 
     | 
    
         
            +
                    swt_widget_class_for(underscored_widget_name)
         
     | 
| 
      
 87 
     | 
    
         
            +
                    true
         
     | 
| 
      
 88 
     | 
    
         
            +
                  rescue NameError
         
     | 
| 
      
 89 
     | 
    
         
            +
                    false
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                # This supports widgets in and out of basic SWT
         
     | 
| 
      
 94 
     | 
    
         
            +
                def self.swt_widget_class_for(underscored_widget_name)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  swt_widget_name = underscored_widget_name.camelcase(:upper)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  swt_widget_class = eval(swt_widget_name)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  unless swt_widget_class.ancestors.include?(org.eclipse.swt.widgets.Widget)
         
     | 
| 
      
 98 
     | 
    
         
            +
                    raise NameError, "Class #{swt_widget_class} matching #{underscored_widget_name} is not a subclass of org.eclipse.swt.widgets.Widget"
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
                  swt_widget_class
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                def widget_listener_exists?(underscored_listener_name)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  listener_method_name = underscored_listener_name.listener_method_name(:lower)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  @widget.getClass.getMethods.each do |widget_method|
         
     | 
| 
      
 106 
     | 
    
         
            +
                    if widget_method.getName.match(/add.*Listener/)
         
     | 
| 
      
 107 
     | 
    
         
            +
                      widget_method.getParameterTypes.each do |listener_type|
         
     | 
| 
      
 108 
     | 
    
         
            +
                        listener_type.getMethods.each do |listener_method|
         
     | 
| 
      
 109 
     | 
    
         
            +
                          if (listener_method.getName == listener_method_name)
         
     | 
| 
      
 110 
     | 
    
         
            +
                            return true
         
     | 
| 
      
 111 
     | 
    
         
            +
                          end
         
     | 
| 
      
 112 
     | 
    
         
            +
                        end
         
     | 
| 
      
 113 
     | 
    
         
            +
                      end
         
     | 
| 
      
 114 
     | 
    
         
            +
                    end
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 117 
     | 
    
         
            +
                end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                def can_add_listener?(underscored_listener_name)
         
     | 
| 
      
 120 
     | 
    
         
            +
                  listener_method_name = underscored_listener_name.camelcase(:lower)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  @widget.getClass.getMethods.each do |widget_method|
         
     | 
| 
      
 122 
     | 
    
         
            +
                    if widget_method.getName.match(/add.*Listener/)
         
     | 
| 
      
 123 
     | 
    
         
            +
                      widget_method.getParameterTypes.each do |listener_type|
         
     | 
| 
      
 124 
     | 
    
         
            +
                        listener_type.getMethods.each do |listener_method|
         
     | 
| 
      
 125 
     | 
    
         
            +
                          if (listener_method.getName == listener_method_name)
         
     | 
| 
      
 126 
     | 
    
         
            +
                            return true
         
     | 
| 
      
 127 
     | 
    
         
            +
                          end
         
     | 
| 
      
 128 
     | 
    
         
            +
                        end
         
     | 
| 
      
 129 
     | 
    
         
            +
                      end
         
     | 
| 
      
 130 
     | 
    
         
            +
                    end
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 133 
     | 
    
         
            +
                end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                def add_listener(underscored_listener_name, &block)
         
     | 
| 
      
 136 
     | 
    
         
            +
                  listener_method_name = underscored_listener_name.camelcase(:lower)
         
     | 
| 
      
 137 
     | 
    
         
            +
                  @widget.getClass.getMethods.each do |widget_method|
         
     | 
| 
      
 138 
     | 
    
         
            +
                    if widget_method.getName.match(/add.*Listener/)
         
     | 
| 
      
 139 
     | 
    
         
            +
                      widget_method.getParameterTypes.each do |listener_type|
         
     | 
| 
      
 140 
     | 
    
         
            +
                        listener_type.getMethods.each do |listener_method|
         
     | 
| 
      
 141 
     | 
    
         
            +
                          if (listener_method.getName == listener_method_name)
         
     | 
| 
      
 142 
     | 
    
         
            +
                            listener_class = Class.new(Object)
         
     | 
| 
      
 143 
     | 
    
         
            +
                            listener_class.send :include, (eval listener_type.to_s.sub("interface", ""))
         
     | 
| 
      
 144 
     | 
    
         
            +
                            listener = listener_class.new
         
     | 
| 
      
 145 
     | 
    
         
            +
                            listener_type.getMethods.each do |t_method|
         
     | 
| 
      
 146 
     | 
    
         
            +
                              eval "def listener.#{t_method.getName}(event) end"
         
     | 
| 
      
 147 
     | 
    
         
            +
                            end
         
     | 
| 
      
 148 
     | 
    
         
            +
                            def listener.block=(block)
         
     | 
| 
      
 149 
     | 
    
         
            +
                              @block = block
         
     | 
| 
      
 150 
     | 
    
         
            +
                            end
         
     | 
| 
      
 151 
     | 
    
         
            +
                            listener.block=block
         
     | 
| 
      
 152 
     | 
    
         
            +
                            eval "def listener.#{listener_method.getName}(event) @block.call(event) if @block end"
         
     | 
| 
      
 153 
     | 
    
         
            +
                            @widget.send(widget_method.getName, listener)
         
     | 
| 
      
 154 
     | 
    
         
            +
                            return GWidgetListener.new(listener)
         
     | 
| 
      
 155 
     | 
    
         
            +
                          end
         
     | 
| 
      
 156 
     | 
    
         
            +
                        end
         
     | 
| 
      
 157 
     | 
    
         
            +
                      end
         
     | 
| 
      
 158 
     | 
    
         
            +
                    end
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                end
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                def process_block(block)
         
     | 
| 
      
 163 
     | 
    
         
            +
                  block.call(@widget)
         
     | 
| 
      
 164 
     | 
    
         
            +
                end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                def async_exec(&block)
         
     | 
| 
      
 167 
     | 
    
         
            +
                  @widget.getDisplay.asyncExec(GRunnable.new(&block))
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                def sync_exec(&block)
         
     | 
| 
      
 171 
     | 
    
         
            +
                  @widget.getDisplay.syncExec(GRunnable.new(&block))
         
     | 
| 
      
 172 
     | 
    
         
            +
                end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                def has_style?(style)
         
     | 
| 
      
 175 
     | 
    
         
            +
                  (widget.style & GSWT[style]) == GSWT[style]
         
     | 
| 
      
 176 
     | 
    
         
            +
                end
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
                def dispose
         
     | 
| 
      
 179 
     | 
    
         
            +
                  @widget.dispose
         
     | 
| 
      
 180 
     | 
    
         
            +
                end
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                private
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                def style(underscored_widget_name, styles)
         
     | 
| 
      
 185 
     | 
    
         
            +
                  styles.empty? ? default_style(underscored_widget_name) : GSWT[*styles]
         
     | 
| 
      
 186 
     | 
    
         
            +
                end
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                def default_style(underscored_widget_name)
         
     | 
| 
      
 189 
     | 
    
         
            +
                  style = @@default_styles[underscored_widget_name] if @@default_styles[underscored_widget_name]
         
     | 
| 
      
 190 
     | 
    
         
            +
                  style = GSWT[:none] unless style
         
     | 
| 
      
 191 
     | 
    
         
            +
                  style
         
     | 
| 
      
 192 
     | 
    
         
            +
                end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                def attribute_setter(attribute_name)
         
     | 
| 
      
 195 
     | 
    
         
            +
                  "set#{attribute_name.to_s.camelcase(:upper)}"
         
     | 
| 
      
 196 
     | 
    
         
            +
                end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
              end
         
     | 
| 
      
 199 
     | 
    
         
            +
            end
         
     |