def addAttribs (node, indent, attribs) :

    text = ""

    for a in attribs :

        value = node.getAttr(a[1])
        if a[2] is not None :
               extra = getattr(node, a[2])
        else : extra = None

        if value == "" : value = None
        if extra == "" : extra = None

        if value is None and extra is None :
            continue

        if value is None : value = "<null>"
        text = text + " " * indent + a[0] + ": " +  value

        if extra is not None :
            text  = text + " (" + extra + ")"

        text = text + "\n"

    return text

def describeContainer (container, indent) :

    text = ""
    text = text + addAttribs \
		  (	container,
			indent,
			[	[	"BGColor",	"bgcolor",	None	],
				[	"Frame  ",	"frame",	None	]

			]
		  )
    return text

def describeLabel (label, indent) :

    text = ""
    text = text + addAttribs \
		  (	label,
			indent,
			[	[	"Text   ",	"text",		None	],
				[	"FGColor",	"fgcolor",	None	],
				[	"BGColor",	"bgcolor",	None	],
				[	"Font   ",	"font",		None	],
				[	"Frame  ",	"frame",	None	]

			]
		  )
    return text

def describeButton (button, indent) :

    text = ""
    text = text + addAttribs \
		  (	button,
			indent,
			[	[	"Text   ",	"text",		"text"	],
				[	"FGColor",	"fgcolor",	None	],
				[	"BGColor",	"bgcolor",	None	],
				[	"Font   ",	"font",		None	]
			]
		  )
    return text

def describeField (field, indent) :

    text = ""
    text = text + addAttribs \
		  (	field,
			indent,
			[	[	"FGColor",	"fgcolor",	None	],
				[	"BGColor",	"bgcolor",	None	],
				[	"Font   ",	"font",		None	],

			]
		  )

    valu = field.value
    if valu is None : valu = ''
    text = text + " " * indent + "Value  : '%s'\n" % valu
    return text

def describeOther (other, indent) :

    text = ""
    text = text + addAttribs \
		  (	other,
			indent,
			[	[	"BGColor",	"bgcolor",	None	]

			]
		  )
    return text

def walker (node, indent) :

    text = ""
    text = text + " " * indent
    text = text + node.getElement() + ": " + node.name
    text = text + "\n"

    if    node.getElement() == "KBContainer" : f = describeContainer
    elif  node.getElement() == "KBLabel"     : f = describeLabel
    elif  node.getElement() == "KBButton"    : f = describeButton
    elif  node.getElement() == "KBField"     : f = describeField
    else                                     : f = describeOther

    text = text + f (node, indent + 2)
    text = text + " " * (indent + 2) + "Geom   : (%d,%d)\n" % (node.width(), node.height())

    for child in node.getChildren() :
        text = text + walker (child, indent + 4)
    return text

def eventFunc (form) :
    return "HELLO" #walker (form, 0)
