Class: Glimmer::SWT::TextProxy

Inherits:
WidgetProxy show all
Defined in:
lib/glimmer/swt/text_proxy.rb

Direct Known Subclasses

StyledTextProxy

Constant Summary

Constants inherited from WidgetProxy

WidgetProxy::DEFAULT_INITIALIZERS

Instance Attribute Summary collapse

Attributes inherited from WidgetProxy

#args, #background, #children, #disposed?, #enabled, #focus, #font, #foreground, #menu, #menu_requested, #parent, #path, #rendered

Instance Method Summary collapse

Methods inherited from WidgetProxy

#add_content_on_render, #add_css_class, #add_css_classes, #add_observer, #apply_property_type_converters, #build_dom, #can_handle_observation_request?, #clear_css_classes, #content, #content_on_render_blocks, #css_classes, #default_observation_request_to_event_mapping, #dispose, #dom_element, #effective_observation_request_to_event_mapping, #event_listener_proxies, for, #get_data, #handle_observation_request, #has_style?, #id, #id=, #initialize, #layout, #listener_dom_element, #listener_path, max_id_number_for, max_id_numbers, #method_missing, #name, next_id_number_for, #observation_requests, #pack, #parent_dom_element, #parent_path, #post_add_content, #post_dispose_child, #post_initialize_child, #property_type_converters, #remove_all_listeners, #remove_css_class, #remove_css_classes, #remove_event_listener_proxies, #render, reset_max_id_numbers!, #selector, #set_attribute, #set_data, #set_focus, #skip_content_on_render_blocks?, #style_element, #swt_widget, underscored_widget_name, widget_class, widget_exists?, #widget_property_listener_installers

Methods included from PropertyOwner

#attribute_getter, #attribute_setter, #get_attribute, #set_attribute

Constructor Details

This class inherits a constructor from Glimmer::SWT::WidgetProxy

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Glimmer::SWT::WidgetProxy

Instance Attribute Details

#textObject

Returns the value of attribute text.



6
7
8
# File 'lib/glimmer/swt/text_proxy.rb', line 6

def text
  @text
end

Instance Method Details

#domObject



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/glimmer/swt/text_proxy.rb', line 79

def dom
  text_text = @text
  text_id = id
  text_style = css
  text_class = name
  # TODO support password field
  options = {type: 'text', id: text_id, style: text_style, class: text_class, value: text_text, style: 'min-width: 27px;'}
  options = options.merge('disabled': 'disabled') unless @enabled
  options = options.merge(type: 'password') if has_style?(:password)
  @dom ||= html {
    input(options)
  }.to_s
end

#elementObject



13
14
15
# File 'lib/glimmer/swt/text_proxy.rb', line 13

def element
  'input'
end

#observation_request_to_event_mappingObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/glimmer/swt/text_proxy.rb', line 17

def observation_request_to_event_mapping
  {
    'on_modify_text' => {
      event: 'keyup',
      event_handler: -> (event_listener) {
        -> (event) {
          # TODO consider unifying this event handler with on_key_pressed by relying on its result instead of hooking another keyup event
          if @last_key_pressed_event.nil? || @last_key_pressed_event.doit
            @text = event.target.value
            event_listener.call(event)
          else
            # TODO Fix doit false, it's not stopping input
            event.prevent
            event.prevent_default
            event.stop_propagation
            event.stop_immediate_propagation
          end
        }
      }
    },
    'on_key_pressed' => {
      event: 'keydown',
      event_handler: -> (event_listener) {
        -> (event) {
          @last_key_pressed_event = event
          @text = event.target.value
          # TODO generalize this solution to all widgets that support key presses
          # TODO support event.location once DOM3 is supported by opal-jquery
          event.define_singleton_method(:keyCode) {event.which}
          event.define_singleton_method(:key_code, &event.method(:keyCode))
          event.define_singleton_method(:character) {event.which.chr}
          event.define_singleton_method(:stateMask) do
            state_mask = 0
            state_mask |= SWTProxy[:alt] if event.alt_key
            state_mask |= SWTProxy[:ctrl] if event.ctrl_key
            state_mask |= SWTProxy[:shift] if event.shift_key
            state_mask |= SWTProxy[:command] if event.meta_key
            state_mask
          end
          event.define_singleton_method(:state_mask, &event.method(:stateMask))
          doit = true
          event.define_singleton_method(:doit=) do |value|
            doit = value
          end
          event.define_singleton_method(:doit) { doit }
          event_listener.call(event)
          
            # TODO Fix doit false, it's not stopping input
          unless doit
            event.prevent
            event.prevent_default
            event.stop_propagation
            event.stop_immediate_propagation
          end
          
          doit
        }
      }
    },
  }
end