Module Gnumed.pycommon.gmGuiBroker

GNUmed GUI element brokerage

This module provides wrappers for the equivalent of global variables needed for a gnumed GUI client interface

@author: Dr. Horst Herb @version: 0.2 @copyright: GPL v2 or later

Expand source code
"""GNUmed GUI element brokerage

This module provides wrappers for the equivalent of global
variables needed for a gnumed GUI client interface

@author: Dr. Horst Herb
@version: 0.2
@copyright: GPL v2 or later
"""

__author__ = "H.Herb <hherb@gnumed.net>, H.Berger <Hilmar.Berger@gmx.de>"
#===========================================================
# FIXME !!! hack moved here from gmConf. This definitely must be replaced by some 
# structure getting data from the backend
# FIXME: hardcoded color/width !?! move to DB (?)
config = {'main.use_notebook':1, 'main.shadow.colour':(131, 129, 131), 'main.shadow.width':10}

#===========================================================
class GuiBroker:
        "Wrapper for global objects needed by GNUMmed GUI clients"

        #This class wraps all global gui objects (variables)for a gnumed
        #application. The static (at application level)dictionary
        #__objects can be accessed through the method addobject
        #and getobject.
        #So, if you need to access the main window frame, you would
        #query an instance of GuiBroker for it.

        __objects:dict = {}
        __keycounter:int = 0

        def __init__(self):
                pass

        def addobject(self, widget, key=None):
                "Add an object to the gnumed gui object dictionary"

                #An object can be anything (class, variable, widget)
                #The "key" is a key expression (number, text) that
                #allows you to retrieve the object.
                #Convention for keys is the widget or variable name
                #as a text string
                #If key is not passed as parameter, a unique serial
                #number is allocated as key and returned

                if not key:
                # create a new sequential key that doesn't exist yet
                        key = GuiBroker.__keycounter + 1
                        while key in GuiBroker.__objects:
                                key +=1
                GuiBroker.__keycounter = key
                GuiBroker.__objects[key]=widget
                return key



        def getobject(self, key):
                "allows to retrieve a gnumed gui element; see addobject() regarding the key parameter"
                return GuiBroker.__objects[key]

        def has_key( self, key):
                return key in GuiBroker.__objects



        def keylist(self):
                " returns a list of all keys; see documentation for the dictionary data type"
                return list(GuiBroker.__objects)



        def valuelist(self):
                "returns a list of all values; see documentation for the dictionary data type"
                return GuiBroker.__objects.values()



        def itemlist(self):
                "returns a list of all key:value pairs; see documentation for the dictionary data type"
                return GuiBroker.__objects.items()



        def __getitem__(self, key):
                "Allows retrieving the value via value = instance[key]"
                return self.getobject(key)



        def __setitem__(self, key, object):
                "Allows access in the style of instance[key]=value"
                return self.addobject(object, key)

#===========================================================
if __name__ == "__main__":

        import sys

        if len(sys.argv) < 2:
                sys.exit()

        if sys.argv[1] != 'test':
                sys.exit()

        # you can test this module by invoking it as main program
        print('>>> gmGuiBroker.GuiBroker test')
        test = GuiBroker()

        print('>>> test.addobject("something", 3)')
        var = test.addobject("something", 3)
        print(var, "\n")

        print('>>> test.addobject("something else without a specified key")')
        var = test.addobject("something else without a specified key")
        print(var, "\n")

        print('>>> test.addobject(test)')
        testreference = test.addobject(test)
        print(testreference, "\n")

        print('>>> test.addobject(100, "hundred)')
        var = test.addobject(100, "hundred")
        print(var, "\n")

        print(">>> test.keylist()")
        var = test.keylist()
        print(var, "\n")

        print(">>> test.valuelist()")
        var = test.valuelist()
        print(var, "\n")

        print(">>> test.itemlist()")
        var = test.itemlist()
        print(var, "\n")

        print(">>> test[3]")
        var = test[3]
        print(var, "\n")

        print(">>> test[testreference].getobject('hundred')")
        var = test[testreference].getobject('hundred')
        print(var, "\n")

        print(">>> var = test[testreference]")
        var = test[testreference]
        print(var, "\n")

        print(">>> var = var['hundred']")
        var = var['hundred']
        print(var, "\n")

        print('>>> try: test.addobject["duplicate key", 3]')
        print('>>> except KeyError: print("Duplicate keys not allowed!"')
        try: test["duplicate key", 3]
        except KeyError: print("Duplicate keys not allowed!")

        print(">>> test['key']='value'")
        test['key']='value'
        print(test['key'])

Classes

class GuiBroker

Wrapper for global objects needed by GNUMmed GUI clients

Expand source code
class GuiBroker:
        "Wrapper for global objects needed by GNUMmed GUI clients"

        #This class wraps all global gui objects (variables)for a gnumed
        #application. The static (at application level)dictionary
        #__objects can be accessed through the method addobject
        #and getobject.
        #So, if you need to access the main window frame, you would
        #query an instance of GuiBroker for it.

        __objects:dict = {}
        __keycounter:int = 0

        def __init__(self):
                pass

        def addobject(self, widget, key=None):
                "Add an object to the gnumed gui object dictionary"

                #An object can be anything (class, variable, widget)
                #The "key" is a key expression (number, text) that
                #allows you to retrieve the object.
                #Convention for keys is the widget or variable name
                #as a text string
                #If key is not passed as parameter, a unique serial
                #number is allocated as key and returned

                if not key:
                # create a new sequential key that doesn't exist yet
                        key = GuiBroker.__keycounter + 1
                        while key in GuiBroker.__objects:
                                key +=1
                GuiBroker.__keycounter = key
                GuiBroker.__objects[key]=widget
                return key



        def getobject(self, key):
                "allows to retrieve a gnumed gui element; see addobject() regarding the key parameter"
                return GuiBroker.__objects[key]

        def has_key( self, key):
                return key in GuiBroker.__objects



        def keylist(self):
                " returns a list of all keys; see documentation for the dictionary data type"
                return list(GuiBroker.__objects)



        def valuelist(self):
                "returns a list of all values; see documentation for the dictionary data type"
                return GuiBroker.__objects.values()



        def itemlist(self):
                "returns a list of all key:value pairs; see documentation for the dictionary data type"
                return GuiBroker.__objects.items()



        def __getitem__(self, key):
                "Allows retrieving the value via value = instance[key]"
                return self.getobject(key)



        def __setitem__(self, key, object):
                "Allows access in the style of instance[key]=value"
                return self.addobject(object, key)

Methods

def addobject(self, widget, key=None)

Add an object to the gnumed gui object dictionary

Expand source code
def addobject(self, widget, key=None):
        "Add an object to the gnumed gui object dictionary"

        #An object can be anything (class, variable, widget)
        #The "key" is a key expression (number, text) that
        #allows you to retrieve the object.
        #Convention for keys is the widget or variable name
        #as a text string
        #If key is not passed as parameter, a unique serial
        #number is allocated as key and returned

        if not key:
        # create a new sequential key that doesn't exist yet
                key = GuiBroker.__keycounter + 1
                while key in GuiBroker.__objects:
                        key +=1
        GuiBroker.__keycounter = key
        GuiBroker.__objects[key]=widget
        return key
def getobject(self, key)

allows to retrieve a gnumed gui element; see addobject() regarding the key parameter

Expand source code
def getobject(self, key):
        "allows to retrieve a gnumed gui element; see addobject() regarding the key parameter"
        return GuiBroker.__objects[key]
def has_key(self, key)
Expand source code
def has_key( self, key):
        return key in GuiBroker.__objects
def itemlist(self)

returns a list of all key:value pairs; see documentation for the dictionary data type

Expand source code
def itemlist(self):
        "returns a list of all key:value pairs; see documentation for the dictionary data type"
        return GuiBroker.__objects.items()
def keylist(self)

returns a list of all keys; see documentation for the dictionary data type

Expand source code
def keylist(self):
        " returns a list of all keys; see documentation for the dictionary data type"
        return list(GuiBroker.__objects)
def valuelist(self)

returns a list of all values; see documentation for the dictionary data type

Expand source code
def valuelist(self):
        "returns a list of all values; see documentation for the dictionary data type"
        return GuiBroker.__objects.values()