class Glimmer::SWT::DisplayProxy
Attributes
open_custom_shells_in_current_window[RW]
open_custom_shells_in_current_window?[RW]
Public Class Methods
instance()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 8 def instance @instance ||= new end
new()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 16 def initialize # Do not call super end
Public Instance Methods
async_exec(proc_tracker = nil, &block)
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 73 def async_exec(proc_tracker = nil, &block) block = proc_tracker unless proc_tracker.nil? queue = nil # general queue if !proc_tracker.nil? && proc_tracker.invoked_from.to_s == 'open' && modal_open? && ( proc_tracker.owner.is_a?(MessageBoxProxy) || (dialog_open? && proc_tracker.owner.is_a?(DialogProxy) && opened_dialogs.last == WidgetProxy.widget_handling_listener&.dialog_ancestor) ) queue = WidgetProxy.widget_handling_listener end return block.call if !modal_open? schedule_async_exec(block, queue) end
Also aliased as: sync_exec
beep()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 69 def beep # TODO (simulate beep from SWT display flashing the screen and making a noise if possible) end
dialog_open?()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 53 def dialog_open? dialogs.any?(&:open?) end
dialogs()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 41 def dialogs @dialogs ||= [] end
element()
click to toggle source
Root element representing widget. Must be overridden by subclasses if different from div
# File lib/glimmer/swt/display_proxy.rb, line 25 def element 'body' end
listener_dom_element()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 29 def listener_dom_element Document end
message_box_open?()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 49 def message_box_open? message_boxes.any?(&:open?) end
message_boxes()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 37 def message_boxes @message_boxes ||= [] end
modal_open?()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 61 def modal_open? message_box_open? or dialog_open? end
modals()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 45 def modals message_boxes + dialogs end
opened_dialogs()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 57 def opened_dialogs dialogs.select(&:open?) end
path()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 20 def path "html body" end
render()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 65 def render # No rendering as body is rendered as part of ShellProxy.. this class only serves as an SWT Display utility end
shells()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 33 def shells @shells ||= [] end
sync_exec(proc_tracker = nil, &block)
sync_exec
kept for API compatibility reasons
Alias for: async_exec
Private Instance Methods
async_exec_queue(widget_handling_listener = nil)
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 95 def async_exec_queue(widget_handling_listener = nil) async_exec_queues[widget_handling_listener] ||= [] end
async_exec_queues()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 91 def async_exec_queues @async_exec_queues ||= {} end
no_widget_handling_listener_work?()
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 99 def no_widget_handling_listener_work? async_exec_queues.reject {|key, value| key.nil?}.values.reduce(:+).to_a.empty? end
schedule_async_exec(block, queue)
click to toggle source
# File lib/glimmer/swt/display_proxy.rb, line 103 def schedule_async_exec(block, queue) async_exec_queue(queue).unshift(block) # TODO consider the need for locking to avoid race conditions (rare or impossible case) if async_exec_queue(queue).size == 1 executer = lambda do # queue could be a widget handling listener queue # TODO see if there are more intricate cases of opening a dialog from a widget listener handler if !message_box_open? && (!dialog_open? || queue&.dialog_ancestor == opened_dialogs.last) && ((!queue.nil? && async_exec_queues.keys.last == queue) || no_widget_handling_listener_work?) block = async_exec_queue(queue).pop block&.call Async::Task.new(delay: 1, &executer) if async_exec_queue(queue).any? else Async::Task.new(delay: 100, &executer) end end Async::Task.new(delay: 1, &executer) end end