lib/glimmer/swt/shell_proxy.rb in glimmer-0.5.7 vs lib/glimmer/swt/shell_proxy.rb in glimmer-0.5.8
- old
+ new
@@ -1,8 +1,9 @@
require 'glimmer/swt/swt_proxy'
require 'glimmer/swt/widget_proxy'
require 'glimmer/swt/display_proxy'
+require 'glimmer/swt/swt_proxy'
require 'glimmer/dsl/shell_expression'
module Glimmer
module SWT
# Proxy for org.eclipse.swt.widgets.Shell
@@ -12,24 +13,31 @@
include_package 'org.eclipse.swt.widgets'
include_package 'org.eclipse.swt.layout'
WIDTH_MIN = 130
HEIGHT_MIN = 0
+ OBSERVED_MENU_ITEMS = ['about', 'preferences']
attr_reader :opened_before
alias opened_before? opened_before
# Instantiates ShellProxy with same arguments expected by SWT Shell
def initialize(*args)
if args.first.is_a?(ShellProxy)
args[0] = args[0].swt_widget
end
+ style_args = args.select {|arg| arg.is_a?(Symbol) || arg.is_a?(String)}
+ if style_args.any?
+ style_arg_start_index = args.index(style_args.first)
+ style_arg_last_index = args.index(style_args.last)
+ args[style_arg_start_index..style_arg_last_index] = SWTProxy[style_args]
+ end
if args.first.nil? || (!args.first.is_a?(Display) && !args.first.is_a?(Shell))
@display = DisplayProxy.instance.swt_display
args = [@display] + args
end
- args = SWTProxy.constantify_args(args).compact
+ args = args.compact
@swt_widget = Shell.new(*args)
@display ||= @swt_widget.getDisplay
@swt_widget.setLayout(FillLayout.new)
@swt_widget.setMinimumSize(WIDTH_MIN, HEIGHT_MIN)
end
@@ -90,12 +98,34 @@
until @swt_widget.isDisposed
@display.sleep unless @display.readAndDispatch
end
end
+ def can_handle_observation_request?(observation_request)
+ result = false
+ if observation_request.start_with?('on_')
+ event_name = observation_request.sub(/^on_/, '')
+ result = OBSERVED_MENU_ITEMS.include?(event_name)
+ end
+ result || super
+ end
+
+ def handle_observation_request(observation_request, &block)
+ if observation_request.start_with?('on_')
+ event_name = observation_request.sub(/^on_/, '')
+ if OBSERVED_MENU_ITEMS.include?(event_name)
+ system_menu = DisplayProxy.instance.swt_display.getSystemMenu
+ menu_item = system_menu.getItems.find {|menu_item| menu_item.getID == SWTProxy["ID_#{event_name.upcase}"]}
+ menu_item.addListener(SWTProxy[:Selection], &block)
+ else
+ super
+ end
+ end
+ end
+
def add_observer(observer, property_name)
case property_name.to_s
- when 'visible?'
+ when 'visible?' #TODO see if you must handle non-? version and/or move elsewhere
visibility_notifier = proc do
observer.call(visible?)
end
on_event_show(&visibility_notifier)
on_event_hide(&visibility_notifier)