Class: Glimmer::SWT::DisplayProxy
- Inherits:
-
Object
- Object
- Glimmer::SWT::DisplayProxy
- 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
-
#swt_display ⇒ Object
readonly
SWT Display object wrapped.
Class Method Summary collapse
-
.instance(*args) ⇒ Object
Returns singleton instance.
Instance Method Summary collapse
- #add_swt_event_listener(swt_constant, &block) ⇒ Object
-
#async_exec(&block) ⇒ Object
Executes code block asynchronously with respect to SWT UI thread.
- #can_handle_observation_request?(observation_request) ⇒ Boolean
- #dispose ⇒ Object
- #handle_observation_request(observation_request, &block) ⇒ Object
-
#initialize(*args) ⇒ DisplayProxy
constructor
A new instance of DisplayProxy.
-
#sync_exec(&block) ⇒ Object
Executes code block synchronously with respect to SWT UI thread.
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_display ⇒ Object (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
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 |
#dispose ⇒ Object
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 |