Class: Glimmer::SWT::DisplayProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/glimmer/swt/display_proxy.rb

Overview

Proxy for org.eclipse.swt.widgets.Display

Maintains a singleton instance since SWT only supports a single active display at a time.

Supports SWT Display’s very useful asyncExec and syncExec methods to support proper multi-threaded manipulation of SWT UI objects

Invoking ‘#swt_display` returns the SWT Display object wrapped by this proxy

Follows the Proxy Design Pattern

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ DisplayProxy

Returns a new instance of DisplayProxy.



32
33
34
# File 'lib/glimmer/swt/display_proxy.rb', line 32

def initialize(*args)
  @swt_display = Display.new(*args)
end

Instance Attribute Details

#swt_displayObject (readonly)

SWT Display object wrapped



30
31
32
# File 'lib/glimmer/swt/display_proxy.rb', line 30

def swt_display
  @swt_display
end

Class Method Details

.instance(*args) ⇒ Object

Returns singleton instance



21
22
23
24
25
26
# File 'lib/glimmer/swt/display_proxy.rb', line 21

def instance(*args)
  if @instance.nil? || @instance.swt_display.isDisposed
    @instance = new(*args)
  end
  @instance
end

Instance Method Details

#add_swt_event_listener(swt_constant, &block) ⇒ Object



67
68
69
70
71
# File 'lib/glimmer/swt/display_proxy.rb', line 67

def add_swt_event_listener(swt_constant, &block)
  event_type = SWTProxy[swt_constant]
  @swt_display.addFilter(event_type, &block)
  #WidgetListenerProxy.new(@swt_display.getListeners(event_type).last)
end

#async_exec(&block) ⇒ Object

Executes code block asynchronously with respect to SWT UI thread



41
42
43
# File 'lib/glimmer/swt/display_proxy.rb', line 41

def async_exec(&block)
  @swt_display.asyncExec(&block)
end

#can_handle_observation_request?(observation_request) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
53
54
55
56
57
58
# File 'lib/glimmer/swt/display_proxy.rb', line 50

def can_handle_observation_request?(observation_request)
  observation_request = observation_request.to_s
  if observation_request.start_with?('on_event_')
    constant_name = observation_request.sub(/^on_event_/, '')
    SWTProxy.has_constant?(constant_name)
  else
    false
  end
end

#disposeObject



36
37
38
# File 'lib/glimmer/swt/display_proxy.rb', line 36

def dispose
  @swt_display.dispose
end

#handle_observation_request(observation_request, &block) ⇒ Object



60
61
62
63
64
65
# File 'lib/glimmer/swt/display_proxy.rb', line 60

def handle_observation_request(observation_request, &block)
  if observation_request.start_with?('on_event_')
    constant_name = observation_request.sub(/^on_event_/, '')
    add_swt_event_listener(constant_name, &block)
  end
end

#sync_exec(&block) ⇒ Object

Executes code block synchronously with respect to SWT UI thread



46
47
48
# File 'lib/glimmer/swt/display_proxy.rb', line 46

def sync_exec(&block)
  @swt_display.syncExec(&block)
end