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