class Rock::Browse::Main
The main window of rock-browse
Attributes
displays[R]
The set of display (rendering) object
There is a one-to-one mapping between the indexes in this array and the Qt::UserRole of the items in {view}. I.e. given an item, item.data(0, Qt::UserRole) is the index of the corresponding renderer.
@return [Array<#render>]
loader[R]
manifest[R]
osdeps[R]
page[R]
The page object in which we render
@return [MetaRuby::GUI::HTML::Page]
view[R]
The model-list widget that lists all objects
@return [ModelListWidget]
Public Class Methods
new(parent = nil, loader = ModelListWidget.default_loader, manifest = Autoproj.manifest, osdeps = Autoproj.osdeps)
click to toggle source
Calls superclass method
# File lib/rock/browse/main.rb, line 28 def initialize(parent = nil, loader = ModelListWidget.default_loader, manifest = Autoproj.manifest, osdeps = Autoproj.osdeps) @loader = loader @manifest = manifest @osdeps = osdeps super(parent) create_ui @displays = Array.new displays[ModelListWidget::ROLE_OROGEN_TYPE] = OroGen::HTML::Type.new(page) displays[ModelListWidget::ROLE_OROGEN_TASK] = OroGen::HTML::TaskContext.new(page) displays[ModelListWidget::ROLE_INSTALLED_PACKAGE] = Rock::HTML::AutoprojPackage.new(page) displays[ModelListWidget::ROLE_AVAILABLE_PACKAGE] = Rock::HTML::AutoprojPackage.new(page) displays[ModelListWidget::ROLE_PACKAGE_SET] = Rock::HTML::AutoprojPackageSet.new(page) displays[ModelListWidget::ROLE_OSDEPS] = Rock::HTML::AutoprojOSDep.new(page) end
Public Instance Methods
create_ui()
click to toggle source
# File lib/rock/browse/main.rb, line 55 def create_ui # Create the UI elements main_layout = Qt::VBoxLayout.new(self) menu_layout = Qt::HBoxLayout.new reload = Qt::PushButton.new("Reload", self) menu_layout.add_widget(reload) menu_layout.add_stretch(1) splitter = Qt::Splitter.new main_layout.add_layout(menu_layout) main_layout.add_widget(splitter) @view = ModelListWidget.new(splitter, loader, manifest, osdeps) text = Qt::WebView.new(splitter) @page = Page.new(text.page) splitter.add_widget(view) splitter.add_widget(text) # And connect the actions reload.connect(SIGNAL('clicked()')) do view.reload end view.connect(SIGNAL('itemClicked(QTreeWidgetItem*,int)')) do |item, col| if item and not item.parent.nil? render_item(item) end end page.connect(SIGNAL('linkClicked(const QUrl&)')) do |url| if url.path == '/rock-browse' role = Integer(url.queryItemValue('role')) name = url.queryItemValue('name') select(name, role) end end end
reload()
click to toggle source
# File lib/rock/browse/main.rb, line 127 def reload view.reload end
render(name, role)
click to toggle source
# File lib/rock/browse/main.rb, line 105 def render(name, role) page.clear if role == ModelListWidget::ROLE_OROGEN_TYPE typekit = loader.typekit_for(name, false) displays[role].render(typekit.resolve_type(name)) elsif role == ModelListWidget::ROLE_OROGEN_TASK model = loader.task_model_from_name(name) displays[role].render(model) elsif role == ModelListWidget::ROLE_INSTALLED_PACKAGE || role == ModelListWidget::ROLE_AVAILABLE_PACKAGE package = manifest.each_package_definition.find { |pkg| pkg.name == name } displays[role].render(self, package) elsif role == ModelListWidget::ROLE_PACKAGE_SET package = manifest.each_package_set.find { |pkg_set| pkg_set.name == name } displays[role].render(self, package) elsif role == ModelListWidget::ROLE_OSDEPS osdep = Rock::HTML::OSPackage.new(name, osdeps.all_definitions[name]) displays[role].render(osdep) else Kernel.raise ArgumentError, "invalid role #{role}" end end
render_item(item)
click to toggle source
# File lib/rock/browse/main.rb, line 93 def render_item(item) role = view.role_from_item(item) name = item.text(0) render(name, role) end
select(name, role = nil)
click to toggle source
# File lib/rock/browse/main.rb, line 99 def select(name, role = nil) if item = view.select(name, role) render_item(item) end end