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
Constant Summary collapse
- OBSERVED_MENU_ITEMS =
['about', 'preferences']
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
- #can_handle_observation_request?(observation_request) ⇒ Boolean
- #content(&block) ⇒ Object
- #handle_observation_request(observation_request, &block) ⇒ Object
-
#initialize(*args) ⇒ DisplayProxy
constructor
A new instance of DisplayProxy.
- #method_missing(method, *args, &block) ⇒ Object
- #respond_to?(method, *args, &block) ⇒ Boolean
Constructor Details
#initialize(*args) ⇒ DisplayProxy
Returns a new instance of DisplayProxy.
55 56 57 58 |
# File 'lib/glimmer/swt/display_proxy.rb', line 55 def initialize(*args) @swt_display = Display.new(*args) @swt_display.set_data('proxy', self) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/glimmer/swt/display_proxy.rb', line 64 def method_missing(method, *args, &block) if can_handle_observation_request?(method) handle_observation_request(method, &block) else swt_display.send(method, *args, &block) end rescue => e Glimmer::Config.logger.debug {"Neither DisplayProxy nor #{swt_display.class.name} can handle the method ##{method}"} super end |
Instance Attribute Details
#swt_display ⇒ Object (readonly)
SWT Display object wrapped
53 54 55 |
# File 'lib/glimmer/swt/display_proxy.rb', line 53 def swt_display @swt_display end |
Class Method Details
.instance(*args) ⇒ Object
Returns singleton instance
44 45 46 47 48 49 |
# File 'lib/glimmer/swt/display_proxy.rb', line 44 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
111 112 113 114 115 |
# File 'lib/glimmer/swt/display_proxy.rb', line 111 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 |
#can_handle_observation_request?(observation_request) ⇒ Boolean
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/glimmer/swt/display_proxy.rb', line 81 def can_handle_observation_request?(observation_request) observation_request = observation_request.to_s if observation_request.start_with?('on_swt_') constant_name = observation_request.sub(/^on_swt_/, '') SWTProxy.has_constant?(constant_name) elsif observation_request.start_with?('on_') event_name = observation_request.sub(/^on_/, '') OBSERVED_MENU_ITEMS.include?(event_name) else false end end |
#content(&block) ⇒ Object
60 61 62 |
# File 'lib/glimmer/swt/display_proxy.rb', line 60 def content(&block) Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::SWT::DisplayExpression.new, &block) end |
#handle_observation_request(observation_request, &block) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/glimmer/swt/display_proxy.rb', line 94 def handle_observation_request(observation_request, &block) observation_request = observation_request.to_s if observation_request.start_with?('on_swt_') constant_name = observation_request.sub(/^on_swt_/, '') add_swt_event_listener(constant_name, &block) elsif observation_request.start_with?('on_') event_name = observation_request.sub(/^on_/, '') if OBSERVED_MENU_ITEMS.include?(event_name) if OS.mac? = swt_display.getSystemMenu = .getItems.find {|| .getID == SWTProxy["ID_#{event_name.upcase}"]} .addListener(SWTProxy[:Selection], &block) end end end end |
#respond_to?(method, *args, &block) ⇒ Boolean
75 76 77 78 79 |
# File 'lib/glimmer/swt/display_proxy.rb', line 75 def respond_to?(method, *args, &block) super || can_handle_observation_request?(method) || swt_display.respond_to?(method, *args, &block) end |