lib/glimmer/swt/shell_proxy.rb in glimmer-dsl-opal-0.25.4 vs lib/glimmer/swt/shell_proxy.rb in glimmer-dsl-opal-0.26.0

- old
+ new

@@ -67,20 +67,21 @@ WIDTH_MIN = 130 HEIGHT_MIN = 0 def initialize(args) + # TODO set parent @args = args @children = [] render # TODO attach to specific element @layout = FillLayoutProxy.new(self, []) @layout.margin_width = 0 @layout.margin_height = 0 self.minimum_size = Point.new(WIDTH_MIN, HEIGHT_MIN) DisplayProxy.instance.shells << self end - + def post_add_content `$( document ).tooltip()` end def element @@ -126,10 +127,20 @@ return if @minimum_size.nil? dom_element.css('min-width', "#{@minimum_size.x}px") dom_element.css('min-height', "#{@minimum_size.y}px") end + def handle_observation_request(keyword, original_event_listener) + case keyword + when 'on_swt_show', 'on_swt_close', 'on_shell_closed' + keyword = 'on_swt_close' if keyword == 'on_shell_closed' + listeners_for(keyword.sub(/^on_/, '')) << original_event_listener.to_proc + else + super(keyword, original_event_listener) + end + end + def style_dom_css <<~CSS .hide { display: none !important; } @@ -167,31 +178,47 @@ work = lambda do unless @open DisplayProxy.instance.shells.select(&:open?).reject {|s| s == self}.map(&:hide) dom_element.remove_class('hide') @open = true + listeners_for('swt_show').each {|listener| listener.call(Event.new(widget: self))} end end if async DisplayProxy.instance.async_exec(&work) else work.call end end + alias show open def hide dom_element.add_class('hide') @open = false end def close DisplayProxy.instance.shells.delete(self) dom_element.remove @open = false + listeners_for('swt_close').each {|listener| listener.call(Event.new(widget: self))} end def open? @open + end + + def visible + @open + end + alias visible? visible + + def visible=(value) + if value + show(async: false) + else + hide + end end end end end