Source code for ajenti.plugins.dashboard.api
from ajenti.api import *
from ajenti.ui import UIElement, p
@p('config', public=False, doc="current configuration dict of this widget instance")
@p('configurable', default=False)
@p('container', type=int, default=0)
@p('index', type=int, default=0)
@interface
[docs]class DashboardWidget (BasePlugin, UIElement):
"""
Base class for widgets (inherits :class:`ajenti.ui.UIElement`).
"""
typeid = 'dashboard:widget'
name = '---'
""" Widget type name """
icon = None
""" Widget icon name """
hidden = False
""" If True, user will not be able to add this widget through dashboard """
@p('configurable', default=True)
@interface
[docs]class ConfigurableWidget (DashboardWidget):
"""
Base class for widgets with a configuration dialog
"""
[docs] def init(self):
self.on_prepare()
self.dialog = self.find('config-dialog')
if self.dialog:
self.dialog.buttons = [
{'text': 'OK', 'id': 'ok'},
{'text': _('Cancel'), 'id': 'cancel'},
]
if not self.config and self.dialog:
self.config = self.create_config()
self.begin_configuration()
else:
self.on_start()
[docs] def begin_configuration(self):
self.on_config_start()
self.dialog.on('button', self.on_config)
self.dialog.visible = True
[docs] def on_config(self, button):
self.dialog.visible = False
if button == 'ok':
self.on_config_save()
self.save_config()
[docs] def on_prepare(self):
"""
Widget should create its UI in this method. Called before **self.config** is created
"""
[docs] def on_start(self):
"""
Widget should populate its UI in this method. **self.config** is now available.
"""
[docs] def on_config_start(self):
"""
Called when user begins to configure the widget. Should populate the config dialog.
"""