Class: MetaRuby::GUI::RenderingManager
- Inherits:
-
Qt::Object
- Object
- Qt::Object
- MetaRuby::GUI::RenderingManager
- Defined in:
- lib/metaruby/gui/rendering_manager.rb
Overview
Management of HTML rendering of objects of different types
Objects of this class allow to register a set of renderers, dedicated to rendering objects of a certain type (defined as a superclass) and automatically switch between the rendering objects.
Instance Attribute Summary collapse
-
#available_renderers ⇒ {Model=>Object}
readonly
Set of rendering objects that are declared.
-
#current_renderer ⇒ Object
readonly
The rendering object used last in #render.
-
#page ⇒ #push
The page object on which we render.
Instance Method Summary collapse
-
#clear ⇒ Object
Clear the current renderer.
-
#disable ⇒ Object
Disable the current renderer.
-
#enable ⇒ Object
Enable the current renderer.
-
#find_renderer(mod) ⇒ (Class,(#render,Hash))?
private
Find a rendering object for the given object.
-
#initialize(page = nil) ⇒ RenderingManager
constructor
Create a rendering manager that acts on a given page.
-
#register_type(type, rendering_class, render_options = Hash.new) ⇒ Object
Registers a certain kind of model as well as the information needed to display it.
-
#registered_exceptions ⇒ Array<Exception>
A list of exceptions that happened during rendering.
-
#render(object, **push_options) ⇒ Object
Call to render the given model.
Constructor Details
#initialize(page = nil) ⇒ RenderingManager
Create a rendering manager that acts on a given page
22 23 24 25 26 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 22 def initialize(page = nil) super() @page = page @available_renderers = Hash.new end |
Instance Attribute Details
#available_renderers ⇒ {Model=>Object} (readonly)
Returns set of rendering objects that are declared. The Model is a class or module that represents the set of models that the renderer can handle. It is ordered by order of priority, i.e. the first model that matches will be used. Do not modify directly, use #register_type instead.
17 18 19 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 17 def available_renderers @available_renderers end |
#current_renderer ⇒ Object (readonly)
The rendering object used last in #render
19 20 21 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 19 def current_renderer @current_renderer end |
#page ⇒ #push
Returns the page object on which we render.
10 11 12 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 10 def page @page end |
Instance Method Details
#clear ⇒ Object
Clear the current renderer
105 106 107 108 109 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 105 def clear if current_renderer current_renderer.clear end end |
#disable ⇒ Object
Disable the current renderer
91 92 93 94 95 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 91 def disable if current_renderer current_renderer.disable end end |
#enable ⇒ Object
Enable the current renderer
98 99 100 101 102 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 98 def enable if current_renderer current_renderer.enable end end |
#find_renderer(mod) ⇒ (Class,(#render,Hash))?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Find a rendering object for the given object
84 85 86 87 88 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 84 def find_renderer(mod) available_renderers.find do |model, _| mod.kind_of?(model) || (mod.kind_of?(Module) && model.kind_of?(Module) && mod <= model) end end |
#register_type(type, rendering_class, render_options = Hash.new) ⇒ Object
Registers a certain kind of model as well as the information needed to display it
It registers the given type on the model browser so that it gets displayed there.
53 54 55 56 57 58 59 60 61 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 53 def register_type(type, rendering_class, = Hash.new) render = if rendering_class.kind_of?(Class) rendering_class.new(page) else rendering_class end available_renderers[type] = [render, ] connect(render, SIGNAL('updated()'), self, SIGNAL('updated()')) end |
#registered_exceptions ⇒ Array<Exception>
A list of exceptions that happened during rendering
31 32 33 34 35 36 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 31 def registered_exceptions if current_renderer.respond_to?(:registered_exceptions) current_renderer.registered_exceptions else [] end end |
#render(object, **push_options) ⇒ Object
Call to render the given model
The renderer that has been used is made active (enabled) and stored in #current_renderer. The previous one is disabled and cleared.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/metaruby/gui/rendering_manager.rb', line 122 def render(object, **) _, (renderer, ) = find_renderer(object) if renderer if current_renderer current_renderer.clear current_renderer.disable end renderer.enable renderer.render(object, .merge()) @current_renderer = renderer else Kernel.raise ArgumentError, "no view available for #{object} (#{object.class})" end end |