"""Main user interface the viewport """ from gluon import current from gluon.html import URL from gluon.tools import PluginManager from .plugin_dbui import (Node, Panel, to_formPanel, to_gridPanel, to_panelWithUrlSelector, ViewportModifier, Window) def to_grid(tablename): """helper function to translate a tablename into the grid configuration. Args: tablename (str) Return: dict """ return to_gridPanel(current.db[tablename]) class ViewportUi(object): @staticmethod def configure(virtdb, db, T): """Configure the viewport. Args: virtdb (pyDAL.DAL): virtual database with the definition of selectors db (pyDAL.DAL): database connection T (gluon.languages.translator): language translator """ nodes = [ ViewportUi.help_node(db, T), ViewportUi.app_node(db, T), ViewportUi.forms_node(db, T), ViewportUi.tables_node(db, T), ViewportUi.reports_node(virtdb, db, T)] mdf = ViewportModifier() mdf.add_node(*nodes) mdf.configure(tabTitleTpl="{1}") # mdf.configure(plugins=["pViewportLogin"], logged=True); mdf.default_node(T("Tables"), T("categories")) # mdf.default_node(T("Tables"), T("new_fields")) # mdf.default_node(T("Tables"), T("publications")) @staticmethod def app_node(db, T): """To deal with preferences for the application. Args: db (pyDAL.DAL): database connection T (gluon.languages.translator): language translator Returns: dbui.Node: the configuration of a tree node. """ node = Node(T("Application")) # node.add_child(T("preferences"), to_grid("preferences")) window = Window(closable=True, items=[{"dbtable": "preferences", "sourceConfig": {"my_date": {"type": "date"}}, "xtype": "xpreferences", "width": 300}], layout="fit", title=T("Preferences"), modal=True) node.add_child(T("preferences"), window) return node @staticmethod def forms_node(db, T): """To configure forms node. Args: db (pyDAL.DAL): database connection T (gluon.languages.translator): language translator Returns: dbui.Node: the configuration of a tree node. """ tables = ("categories", "harvesters", "publications", "new_fields") node = Node(T("Forms")) for tablename in tables: leaf = Window(closable=True, items=[to_formPanel(db[tablename])], layout="fit", title="Add %s ..." % tablename, modal=True) node.add_child(T(tablename), leaf) return node @staticmethod def tables_node(db, T): """To configure tables node. Args: db (pyDAL.DAL): database connection T (gluon.languages.translator): language translator Returns: dbui.Node: the configuration of a tree node. """ node = Node(T("Tables")) node.add_children(db.tables, func=to_grid) return node @staticmethod def help_node(db, T): """To configure help node. Args: db (pyDAL.DAL): database connection T (gluon.languages.translator): language translator Returns: dbui.Node: the configuration of a tree node. """ plugin = PluginManager("dbui").dbui node = Node(T("Help")) loader = dict( autoLoad=True, renderer="html", scripts=False, url=URL("static", plugin.app_about.replace("static/", ""))) about_panel = Panel( loader=loader, plugins=["pPanelLoaderException"], autoScroll=True) loader = dict( autoLoad=True, renderer="html", scripts=True, url=URL("plugin_dbui", "documentations_table")) doctable_panel = Panel( loader=loader, plugins=["pPanelLoaderException"], autoScroll=True) loader = dict( autoLoad=True, renderer="html", scripts=True, url=URL("plugin_dbui", "documentations_list")) doclist_panel = Panel( loader=loader, plugins=["pPanelLoaderException"], autoScroll=True) loader = dict( autoLoad=True, renderer="html", scripts=True, url=URL("plugin_dbui", "versions")) version_panel = Panel( loader=loader, plugins=["pPanelLoaderException"]) node.add_child(T("about"), about_panel) node.add_child(T("documentations (table)"), doctable_panel) node.add_child(T("documentations (list)"), doclist_panel) node.add_child(T("versions"), version_panel) return node @staticmethod def reports_node(virtdb, db, T): """To configure reports nodes. Args: virtdb (pyDAL.DAL): virtual database with the definition of selectors db (pyDAL.DAL): database connection T (gluon.languages.translator): language translator configuration of the selector panel. Returns: dbui.Node: the configuration of a tree node. """ node = Node(T("Reports")) panel_1 = Panel(html="salut ma poule") panel_2 = to_panelWithUrlSelector( virtdb.foo1, baseUrl=URL("reports", "report_2"), baseParams={"hello": 3}, extField="my_format", plugins=["pMathJax"]) panel_3 = to_panelWithUrlSelector( virtdb.harvester_selector, baseUrl=URL("reports", "report_3"), selectorRegion="east", selectorTitle="Select a project") panel_4 = to_panelWithUrlSelector( virtdb.report4, baseUrl=URL("reports", "report_4")) node.add_child(T("report_1"), panel_1) node.add_child(T("report_2"), panel_2) node.add_child(T("report_3"), panel_3) node.add_child(T("report_4"), panel_4) return node