class Glimmer::SWT::TextProxy

Attributes

border[R]
border?[R]
center[R]
center?[R]
left[R]
left?[R]
multi[R]
multi?[R]
read_only[R]
read_only?[R]
right[R]
right?[R]
text[R]
wrap[R]
wrap?[R]

Public Class Methods

new(parent, args, block) click to toggle source
Calls superclass method
# File lib/glimmer/swt/text_proxy.rb, line 15
def initialize(parent, args, block)
  args << :border if args.empty?
  @border = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:border] }
  @left = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:left] }
  @center = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:center] }
  @right = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:right] }
  @read_only = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:read_only] }
  @wrap = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:wrap] }
  @multi = !!args.detect { |arg| SWTProxy[arg] == SWTProxy[:multi] }
  super(parent, args, block)
end

Public Instance Methods

dom() click to toggle source
# File lib/glimmer/swt/text_proxy.rb, line 97
def dom
  text_text = @text
  text_id = id
  text_style = 'min-width: 27px; '
  text_style += 'border: none; ' if !@border
  text_style += 'text-align: left; ' if @left
  text_style += 'text-align: center; ' if @center
  text_style += 'text-align: right; ' if @right
  text_class = name
  options = {type: 'text', id: text_id, style: text_style, class: text_class, value: text_text}
  options = options.merge('disabled': 'disabled') unless @enabled
  options = options.merge('readonly': 'readonly') if @read_only
  options = options.merge('contenteditable': 'true')
  options = options.merge(type: 'password') if has_style?(:password)
  @dom ||= html {
    send(element, options)
  }.to_s
end
element() click to toggle source
# File lib/glimmer/swt/text_proxy.rb, line 32
def element
  @wrap || @multi ? 'textarea' : 'input'
end
observation_request_to_event_mapping() click to toggle source
# File lib/glimmer/swt/text_proxy.rb, line 36
def observation_request_to_event_mapping
  myself = self
  {
    'on_verify_text' => [
      {
        event: 'beforeinput',
        event_handler: -> (event_listener) {
          -> (event) {
            event.define_singleton_method(:widget) {myself}
            event.define_singleton_method(:text) {`#{event.to_n}.originalEvent.data` || ''}
            selection_start = `#{event.target}[0].selectionStart`
            selection_end = `#{event.target}[0].selectionEnd`
            if `#{event.to_n}.originalEvent.inputType` == 'deleteContentBackward' && selection_start == selection_end
              selection_start -= 1
              selection_start = 0 if selection_start < 0
            end
            event.define_singleton_method(:start) do
              selection_start
            end
            event.define_singleton_method(:end) {selection_end}
            doit = true
            event.define_singleton_method(:doit=) do |value|
              doit = value
            end
            event.define_singleton_method(:doit) { doit }
            event_listener.call(event)
            
            if !doit
              `#{event.to_n}.originalEvent.returnValue = false`
            end
            
            doit
          }
        }
      },
      {
        event: 'input',
        event_handler: -> (event_listener) {
          -> (event) {
            event.define_singleton_method(:widget) {myself}
            @text = event.target.value
          }
        }
      }
    ],
    'on_modify_text' => [
      {
        event: 'input',
        event_handler: -> (event_listener) {
          -> (event) {
            # TODO add all attributes for on_modify_text modify event
            event.define_singleton_method(:widget) {myself}
            @text = event.target.value
            event_listener.call(event)
          }
        }
      }
    ],
  }
end
text=(value) click to toggle source
# File lib/glimmer/swt/text_proxy.rb, line 27
def text=(value)
  @text = value
  Document.find(path).value = value
end