class Glimmer::SWT::ShellProxy

Constants

HEIGHT_MIN
STYLE
WIDTH_MIN

Attributes

menu_bar[RW]
minimum_size[R]

TODO consider renaming to ShellProxy to match SWT API

Public Class Methods

new(args) click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 71
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

Public Instance Methods

close() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 199
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
dom() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 154
def dom
  i = 0
  body_id = id
  body_class = ([name, 'hide'] + css_classes.to_a).join(' ')
  @dom ||= html {
    div(id: body_id, class: body_class) {
      # TODO consider supporting the idea of dynamic CSS building on close of shell that adds only as much CSS as needed for widgets that were mentioned
      style(class: 'common-style') {
        style_dom_css
      }
      [LayoutProxy, WidgetProxy].map(&:descendants).reduce(:+).each do |style_class|
        if style_class.constants.include?('STYLE')
          style(class: "#{style_class.name.split(':').last.underscore.gsub('_', '-').sub(/-proxy$/, '')}-style") {
            style_class::STYLE
          }
        end
      end
      div(class: 'dialog-overlay hide') {
      }
    }
  }.to_s
end
element() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 87
def element
  'div'
end
favicon_dom_element() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 121
def favicon_dom_element
  Document.find('link[rel=icon]')
end
handle_observation_request(keyword, original_event_listener) click to toggle source
Calls superclass method
# File lib/glimmer/swt/shell_proxy.rb, line 132
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
hide() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 194
def hide
  dom_element.add_class('hide')
  @open = false
end
image() click to toggle source

favicon

# File lib/glimmer/swt/shell_proxy.rb, line 104
def image
  @image
end
image=(value) click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 108
def image=(value)
  @image = value
  # TODO consider moving this code to favicon_dom_element
  if favicon_dom_element.empty?
    favicon_element = Element.new(:link)
    favicon_element.attr('rel', 'icon')
    Document.find('head').append(favicon_element)
  else
    favicon_element = favicon_dom_element
  end
  favicon_element.attr('href', image)
end
minimum_size=(width_or_minimum_size, height = nil) click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 125
def minimum_size=(width_or_minimum_size, height = nil)
  @minimum_size = height.nil? ? width_or_minimum_size : Point.new(width_or_minimum_size, height)
  return if @minimum_size.nil?
  dom_element.css('min-width', "#{@minimum_size.x}px")
  dom_element.css('min-height', "#{@minimum_size.y}px")
end
open(async: true) click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 177
def open(async: true)
  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
Also aliased as: show
open?() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 206
def open?
  @open
end
parent_path() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 91
def parent_path
  'body'
end
post_add_content() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 83
def post_add_content
  `$( document ).tooltip()`
end
show(async: true)
Alias for: open
style_dom_css() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 142
      def style_dom_css
        <<~CSS
          .hide {
            display: none !important;
          }
          .selected {
            background: rgb(80, 116, 211);
            color: white;
          }
        CSS
      end
text() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 95
def text
  $document.title
end
text=(value) click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 99
def text=(value)
  Document.title = value
end
visible() click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 210
def visible
  @open
end
Also aliased as: visible?
visible=(value) click to toggle source
# File lib/glimmer/swt/shell_proxy.rb, line 215
def visible=(value)
  if value
    show(async: false)
  else
    hide
  end
end
visible?()
Alias for: visible