Module Gnumed.wxpython.gmPlugin_Patient
gmPlugin_Patient - base classes for GNUMed's patient plugin architecture.
@copyright: author @license: GPL v2 or later (details at https://www.gnu.org)
Classes
class BasePlugin (set='', guibroker=None, callbackbroker=None, params=None)
-
Expand source code
class BasePlugin: """Base class for all plugins providing wxPython widgets. Plugins must have a class descending of this class in their file, which MUST HAVE THE SAME NAME AS THE FILE. The file must be in a directory which is loaded by LoadPluginSet (gui/ for the moment, others may be added for different plugin types) """ # NOTE: I anticipate that all plugins will in fact be derived # from this class. Without the brokers a plugin is useless (IH) def __init__(self, set='', guibroker=None, callbackbroker=None, params=None): self.gb = guibroker self.cb = callbackbroker if self.gb is None: self.gb = gmGuiBroker.GuiBroker() self.set = set #----------------------------------------------------- def GetIcon (self): """Return icon representing page on the toolbar. This is the default behaviour. GetIconData should return pickled, compressed and escaped string with the icon data. If you want to change the behaviour (because you want to load plugin icons from overseas via a satellite link or something you need to override this function in your plugin (class). Using this standard code also allows us to only import cPickle and zlib here and not in each and every plugin module which should speed up plugin load time :-) """ # FIXME: load from config which plugin we want # which_icon is a cookie stored on the backend by a config manager, # it tells the plugin which icon to return data for, which_icon = None icon_data = self.GetIconData(which_icon) if icon_data is None: return None else: return wx.BitmapFromXPMData(pickle.loads(zlib.decompress(icon_data))) #----------------------------------------------------- def GetIconData(self, anIconID = None): # FIXME: in overriding methods need to be very careful about the # type of the icon ID since if we read it back from the database we # may not know what type it was return None #----------------------------------------------------- def GetWidget (self, parent): """ Return the widget to display. Usually called from register(). The instance returned is the active object for event handling purposes. """ raise AttributeError('no such patient plugin - GetWidget') #----------------------------------------------------- def MenuInfo (self): """Return tuple of (menuname, menuitem). menuname can be "tools", "view", "help", "file" If you return "None" no entry will be placed in any menu. """ raise AttributeError('no such patient plugin - MenuInfo') #----------------------------------------------------- def Raise (self): """Raises this plugin to the top level if not visible. """ raise AttributeError('no such patient plugin - Raise') #----------------------------------------------------- def ReceiveFocus(self): """Called whenever this module receives focus and is thus shown onscreen. """ pass #----------------------------------------------------- def register(self): # register ANY type of plugin, regardless of where plugged in # we may be able to do away with this once we don't do # several types of plugins anymore, as we should self.gb['modules.%s' % self.set][self.__class__.__name__] = self # split/renamed 'horstspace.notebook.%s' #_log.Log(gmLog.lInfo, "plugin: [%s] (class: [%s]) set: [%s]" % (self.name(), self.__class__.__name__, self.set)) #----------------------------------------------------- def unregister(self): del self.gb['modules.%s' % self.set][self.__class__.__name__] # split/renamed 'horstspace.notebook.%s' #_log.Log(gmLog.lInfo, "plugin: [%s] (class: [%s]) set: [%s]" % (self.name(), self.__class__.__name__, self.set)) #----------------------------------------------------- def name(self): return 'plugin %s' % self.__class__.__name__
Base class for all plugins providing wxPython widgets.
Plugins must have a class descending of this class in their file, which MUST HAVE THE SAME NAME AS THE FILE.
The file must be in a directory which is loaded by LoadPluginSet (gui/ for the moment, others may be added for different plugin types)
Subclasses
Methods
def GetIcon(self)
-
Expand source code
def GetIcon (self): """Return icon representing page on the toolbar. This is the default behaviour. GetIconData should return pickled, compressed and escaped string with the icon data. If you want to change the behaviour (because you want to load plugin icons from overseas via a satellite link or something you need to override this function in your plugin (class). Using this standard code also allows us to only import cPickle and zlib here and not in each and every plugin module which should speed up plugin load time :-) """ # FIXME: load from config which plugin we want # which_icon is a cookie stored on the backend by a config manager, # it tells the plugin which icon to return data for, which_icon = None icon_data = self.GetIconData(which_icon) if icon_data is None: return None else: return wx.BitmapFromXPMData(pickle.loads(zlib.decompress(icon_data)))
Return icon representing page on the toolbar.
This is the default behaviour. GetIconData should return pickled, compressed and escaped string with the icon data.
If you want to change the behaviour (because you want to load plugin icons from overseas via a satellite link or something you need to override this function in your plugin (class).
Using this standard code also allows us to only import cPickle and zlib here and not in each and every plugin module which should speed up plugin load time :-)
def GetIconData(self, anIconID=None)
-
Expand source code
def GetIconData(self, anIconID = None): # FIXME: in overriding methods need to be very careful about the # type of the icon ID since if we read it back from the database we # may not know what type it was return None
def GetWidget(self, parent)
-
Expand source code
def GetWidget (self, parent): """ Return the widget to display. Usually called from register(). The instance returned is the active object for event handling purposes. """ raise AttributeError('no such patient plugin - GetWidget')
Return the widget to display. Usually called from register(). The instance returned is the active object for event handling purposes.
def MenuInfo(self)
-
Expand source code
def MenuInfo (self): """Return tuple of (menuname, menuitem). menuname can be "tools", "view", "help", "file" If you return "None" no entry will be placed in any menu. """ raise AttributeError('no such patient plugin - MenuInfo')
Return tuple of (menuname, menuitem).
menuname can be "tools", "view", "help", "file"
If you return "None" no entry will be placed in any menu.
def Raise(self)
-
Expand source code
def Raise (self): """Raises this plugin to the top level if not visible. """ raise AttributeError('no such patient plugin - Raise')
Raises this plugin to the top level if not visible.
def ReceiveFocus(self)
-
Expand source code
def ReceiveFocus(self): """Called whenever this module receives focus and is thus shown onscreen. """ pass
Called whenever this module receives focus and is thus shown onscreen.
def name(self)
-
Expand source code
def name(self): return 'plugin %s' % self.__class__.__name__
def register(self)
-
Expand source code
def register(self): # register ANY type of plugin, regardless of where plugged in # we may be able to do away with this once we don't do # several types of plugins anymore, as we should self.gb['modules.%s' % self.set][self.__class__.__name__] = self # split/renamed 'horstspace.notebook.%s' #_log.Log(gmLog.lInfo, "plugin: [%s] (class: [%s]) set: [%s]" % (self.name(), self.__class__.__name__, self.set))
def unregister(self)
-
Expand source code
def unregister(self): del self.gb['modules.%s' % self.set][self.__class__.__name__] # split/renamed 'horstspace.notebook.%s' #_log.Log(gmLog.lInfo, "plugin: [%s] (class: [%s]) set: [%s]" % (self.name(), self.__class__.__name__, self.set))
class wxPatientPlugin (set='', guibroker=None, callbackbroker=None, params=None)
-
Expand source code
class wxPatientPlugin (BasePlugin): """ A 'small page', sits inside the patient view, with the side visible """ def register (self): BasePlugin.register (self) self.mwm = self.gb['clinical.manager'] # FIXME: do proper config check for shadowing # FIXME: do we always want shadows and set it to 0 width via themes ? shadow = gmShadow.Shadow (self.mwm, -1) widget = self.GetWidget (shadow) shadow.SetContents (widget) self.mwm.RegisterLeftSide (self.__class__.__name__, shadow) icon = self.GetIcon () if icon is not None: tb2 = self.gb['toolbar.%s' % 'gmClinicalWindowManager'] #tb2.AddSeparator() self.tool_id = wx.NewId () #tool1 = tb2.AddTool( self.tool_id, icon, shortHelpString = self.name() ) wx.EVT_TOOL (tb2, self.tool_id, self.OnTool) menuname = self.name () menu = self.gb['clinical.submenu'] self.menu_id = wx.NewId () menu.Append (self.menu_id, menuname) #wx.EVT_MENU (..., self.menu_id, self.OnTool) #----------------------------------------------------- def OnTool (self, event): self.ReceiveFocus() self.mwm.Display (self.__class__.__name__) # redundant as cannot access toolbar unless mwm raised #self.gb['modules.gui']['Patient'].Raise () # split/renamed 'horstspace.notebook.%s' #----------------------------------------------------- def Raise (self): self.gb['modules.gui']['Patient'].Raise() # split/renamed 'horstspace.notebook.%s' self.mwm.Display (self.__class__.__name__) #----------------------------------------------------- def unregister (self): BasePlugin.unregister (self) self.mwm.Unregister (self.__class__.__name__) #menu = self.gb['main.submenu'] #menu.Delete (menu_id) if self.GetIcon () is not None: tb2 = self.gb['toolbar.%s' % 'gmClinicalWindowManager'] tb2.DeleteTool (self.tool_id) del self.gb['modules.patient'][self.__class__.__name__]
A 'small page', sits inside the patient view, with the side visible
Ancestors
Methods
def OnTool(self, event)
-
Expand source code
def OnTool (self, event): self.ReceiveFocus() self.mwm.Display (self.__class__.__name__) # redundant as cannot access toolbar unless mwm raised #self.gb['modules.gui']['Patient'].Raise () # split/renamed 'horstspace.notebook.%s'
def register(self)
-
Expand source code
def register (self): BasePlugin.register (self) self.mwm = self.gb['clinical.manager'] # FIXME: do proper config check for shadowing # FIXME: do we always want shadows and set it to 0 width via themes ? shadow = gmShadow.Shadow (self.mwm, -1) widget = self.GetWidget (shadow) shadow.SetContents (widget) self.mwm.RegisterLeftSide (self.__class__.__name__, shadow) icon = self.GetIcon () if icon is not None: tb2 = self.gb['toolbar.%s' % 'gmClinicalWindowManager'] #tb2.AddSeparator() self.tool_id = wx.NewId () #tool1 = tb2.AddTool( self.tool_id, icon, shortHelpString = self.name() ) wx.EVT_TOOL (tb2, self.tool_id, self.OnTool) menuname = self.name () menu = self.gb['clinical.submenu'] self.menu_id = wx.NewId () menu.Append (self.menu_id, menuname) #wx.EVT_MENU (..., self.menu_id, self.OnTool)
def unregister(self)
-
Expand source code
def unregister (self): BasePlugin.unregister (self) self.mwm.Unregister (self.__class__.__name__) #menu = self.gb['main.submenu'] #menu.Delete (menu_id) if self.GetIcon () is not None: tb2 = self.gb['toolbar.%s' % 'gmClinicalWindowManager'] tb2.DeleteTool (self.tool_id) del self.gb['modules.patient'][self.__class__.__name__]
Inherited members