Source code for cytoflowgui.help_pane

#!/usr/bin/env python3.8
# coding: latin-1

# (c) Massachusetts Institute of Technology 2015-2018
# (c) Brian Teague 2018-2022
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""
cytoflowgui.help_pane
---------------------

Defines the dock pane to show a help page for the currently-selected
operation or view.
"""

import pathlib

from traits.api import Instance, List, observe, Str, HTML
from traitsui.api import View, Item
from pyface.tasks.api import TraitsDockPane, Task  # @UnresolvedImport
from pyface.qt import QtGui
from traitsui.editors.html_editor import HTMLEditor


from cytoflowgui.view_plugins.i_view_plugin import IViewPlugin
from cytoflowgui.op_plugins.i_op_plugin import IOperationPlugin
from cytoflowgui.util import HintedWidget

[docs] class HelpDockPane(TraitsDockPane): """ A `pyface.tasks.i_dock_pane.IDockPane` to view help for the current `IWorkflowOperation` or `IWorkflowView`. """ #### TaskPane interface ############################################### id = 'cytoflowgui.help_pane' """This pane's GUID""" name = 'Help' """This pane's name""" task = Instance(Task) """The Task that serves as the controller""" view_plugins = List(IViewPlugin) """The list of `IViewPlugin` to search for help pages""" op_plugins = List(IOperationPlugin) """The list of `IOperationPlugin` to search for help pages""" help_id = Str """The GUID of the operation or view whose help we're currently showing""" html = HTML("<b>Welcome to Cytoflow!</b>") """The HTML trait containing the current help page""" traits_view = View(Item('pane.html', editor = HTMLEditor(base_url = pathlib.PurePath(__file__).parent.joinpath('help').joinpath('operations').as_posix()), show_label = False))
[docs] def create_contents(self, parent): """Create the pane's contents, which is just the view's UI""" self.ui = self.edit_traits(kind='subpanel', parent=parent) layout = QtGui.QHBoxLayout() control = HintedWidget() layout.addWidget(self.ui.control) control.setLayout(layout) control.setParent(parent) parent.setWidget(control) return control
@observe('model:selected', post_init = True) def _on_select_op(self, _): if self.model.selected: self.help_id = self.model.selected.operation.id @observe('model:selected:current_view', post_init = True) def _on_select_view(self, _): if self.model.selected: self.help_id = self.model.selected.current_view.id @observe('help_id', post_init = True) def _on_help_id_changed(self, _): for plugin in self.view_plugins: if self.help_id == plugin.view_id: try: self.html = plugin.get_help() except AttributeError: pass finally: return for plugin in self.op_plugins: if self.help_id == plugin.operation_id: try: self.html = plugin.get_help() except AttributeError: pass finally: return