Class: RWidget

Inherits:
Object
  • Object
show all
Includes:
Parent
Defined in:
lib/command_handlers/models/r_widget.rb

Direct Known Subclasses

RShell, RTabItemComposite

Constant Summary collapse

@@default_styles =

TODO externalize

{
  "text" => SWT::BORDER,
  "table" => SWT::BORDER,
  "spinner" => SWT::BORDER,
  "list" => SWT::BORDER | SWT::V_SCROLL,
  "button" => SWT::PUSH,
}
@@default_initializers =

TODO externalize

{
  "composite" => Proc.new {|composite| composite.setLayout(GridLayout.new) },
  "table" => Proc.new do |table|
    table.setHeaderVisible(true)
    table.setLinesVisible(true)
  end,
  "table_column" => Proc.new { |table_column| table_column.setWidth(80) },
  "group" => Proc.new {|group| group.setLayout(GridLayout.new) },
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(underscored_widget_name, parent, styles, &contents) ⇒ RWidget

styles is a comma separate list of symbols representing SWT styles in lower case



34
35
36
37
# File 'lib/command_handlers/models/r_widget.rb', line 34

def initialize(underscored_widget_name, parent, styles, &contents)
  @widget = underscored_widget_name.swt_widget.new(parent, style(underscored_widget_name, styles))
  @@default_initializers[underscored_widget_name].call(@widget) if @@default_initializers[underscored_widget_name]
end

Instance Attribute Details

#widgetObject (readonly)

Returns the value of attribute widget.



11
12
13
# File 'lib/command_handlers/models/r_widget.rb', line 11

def widget
  @widget
end

Class Method Details

.widget_exists?(underscored_widget_name) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
# File 'lib/command_handlers/models/r_widget.rb', line 51

def self.widget_exists?(underscored_widget_name)
  begin
    eval underscored_widget_name.camelcase(:upper)
    true
  rescue NameError
    false
  end
end

Instance Method Details

#add_listener(underscored_listener_name, &block) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/command_handlers/models/r_widget.rb', line 92

def add_listener(underscored_listener_name, &block)
  listener_method_name = underscored_listener_name.camelcase(:lower)
  @widget.getClass.getMethods.each do |widget_method|
    if widget_method.getName.match(/add.*Listener/)
      widget_method.getParameterTypes.each do |listener_type|
        listener_type.getMethods.each do |listener_method|
          if (listener_method.getName == listener_method_name)
            listener_class = Class.new(Object)
            listener_class.send :include, (eval listener_type.to_s.sub("interface", ""))
            listener = listener_class.new
            listener_type.getMethods.each do |t_method|
              eval "def listener.#{t_method.getName}(event) end"
            end
            def listener.block=(block)
              @block = block
            end
            listener.block=block
            eval "def listener.#{listener_method.getName}(event) @block.call(event) if @block end"
            @widget.send(widget_method.getName, listener)
            return RWidgetListener.new(listener)
          end
        end
      end
    end
  end
end

#async_exec(&block) ⇒ Object



123
124
125
# File 'lib/command_handlers/models/r_widget.rb', line 123

def async_exec(&block)
  @widget.getDisplay.asyncExec(RRunnable.new(&block))
end

#can_add_listener?(underscored_listener_name) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/command_handlers/models/r_widget.rb', line 76

def can_add_listener?(underscored_listener_name)
  listener_method_name = underscored_listener_name.camelcase(:lower)
  @widget.getClass.getMethods.each do |widget_method|
    if widget_method.getName.match(/add.*Listener/)
      widget_method.getParameterTypes.each do |listener_type|
        listener_type.getMethods.each do |listener_method|
          if (listener_method.getName == listener_method_name)
            return true
          end
        end
      end
    end
  end
  return false
end

#has_attribute?(attribute_name, *args) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/command_handlers/models/r_widget.rb', line 39

def has_attribute?(attribute_name, *args)
  @widget.respond_to?(attribute_setter(attribute_name), args)
end

#has_style?(style) ⇒ Boolean

Returns:

  • (Boolean)


131
132
133
# File 'lib/command_handlers/models/r_widget.rb', line 131

def has_style?(style)
  (widget.style & style.swt_constant) == style.swt_constant
end

#process_block(block) ⇒ Object



119
120
121
# File 'lib/command_handlers/models/r_widget.rb', line 119

def process_block(block)
  block.call(@widget)
end

#set_attribute(attribute_name, *args) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/command_handlers/models/r_widget.rb', line 43

def set_attribute(attribute_name, *args)
  if args.count == 1 && args.first.is_a?(Symbol) && args.first.to_s.start_with?('color_')
    standard_color = args.first
    args[0] = RColor.for(widget.getDisplay, standard_color)
  end
  @widget.send(attribute_setter(attribute_name), *args)
end

#sync_exec(&block) ⇒ Object



127
128
129
# File 'lib/command_handlers/models/r_widget.rb', line 127

def sync_exec(&block)
  @widget.getDisplay.syncExec(RRunnable.new(&block))
end

#widget_listener_exists?(underscored_listener_name) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/command_handlers/models/r_widget.rb', line 60

def widget_listener_exists?(underscored_listener_name)
  listener_method_name = underscored_listener_name.listener_method_name(:lower)
  @widget.getClass.getMethods.each do |widget_method|
    if widget_method.getName.match(/add.*Listener/)
      widget_method.getParameterTypes.each do |listener_type|
        listener_type.getMethods.each do |listener_method|
          if (listener_method.getName == listener_method_name)
            return true
          end
        end
      end
    end
  end
  return false
end