# --------------------------------------------------------------------------
# Handle BooleanDomain
# --------------------------------------------------------------------------
[docs]def booleanDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["widget"] = "checkbox"
uiProps["type"] = "int"
return True
# --------------------------------------------------------------------------
# Handle EnumerationDomain
# --------------------------------------------------------------------------
[docs]def enumerationDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["widget"] = "list-1"
uiProps["type"] = "int"
valMap = {}
for entryNum in range(domain.GetNumberOfEntries()):
valMap[domain.GetEntryText(entryNum)] = domain.GetEntryValue(entryNum)
uiProps["values"] = valMap
return True
# --------------------------------------------------------------------------
# Handle StringListDomain
# --------------------------------------------------------------------------
[docs]def stringListDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["widget"] = "list-1"
uiProps["type"] = "str"
valuesList = []
for idx in range(domain.GetNumberOfStrings()):
valuesList.append(domain.GetString(idx))
uiProps["values"] = valuesList
return True
# --------------------------------------------------------------------------
# Handle TreeDomain
# --------------------------------------------------------------------------
[docs]def numpad(numelts):
return len(str(int(numelts)))
[docs]def treeDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["type"] = "int"
uiProps["widget"] = "list-n"
values = []
index = 0
stack = []
stack.append([domain.GetInformation(), ["Multi-block Dataset"], -1])
while len(stack) > 0:
me = stack.pop()
dataInformation = me[0]
accumulatedName = me[1]
parentIndex = me[2]
values.append([accumulatedName, index, parentIndex])
infoName = None
if dataInformation:
infoName = dataInformation.GetCompositeDataClassName()
if infoName:
# May have children
info = dataInformation.GetCompositeDataInformation()
numChildren = info.GetNumberOfChildren()
if numChildren > 0:
for i in range(numChildren - 1, -1, -1):
child = info.GetDataInformation(i)
childName = info.GetName(i)
stack.append([child, accumulatedName + [childName], index])
index += 1
# valMap = { 'Block 1': 2, 'Block 2': 3 }
valMap = {}
blockList = [None] * len(values)
pads = numpad(len(values))
for value in values:
names = value[0]
blockIdx = value[1]
parentIdx = value[2]
padding = "-" * (len(names) - 1)
valuesEntryName = "%s %s %s" % (str(blockIdx).zfill(pads), padding, names[-1])
valMap[valuesEntryName] = blockIdx
blockList[blockIdx] = {"label": names[-1], "parent": parentIdx, "id": blockIdx}
uiProps["values"] = valMap
uiProps["blocks"] = blockList
uiProps["sort"] = True
return True
# --------------------------------------------------------------------------
# Handle ArrayListDomain
# --------------------------------------------------------------------------
[docs]def arrayListDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["type"] = "str"
uiProps["widget"] = "list-1"
fieldMap = {"0": "POINTS", "1": "CELLS"}
valuesMap = {}
valuesList = []
for arnum in range(domain.GetNumberOfStrings()):
stringName = domain.GetString(arnum)
try:
assocVar = domain.GetFieldAssociation(arnum)
valuesMap[stringName] = [fieldMap[str(assocVar)], stringName]
except:
valuesList.append(stringName)
if len(valuesList) > 0:
uiProps["values"] = valuesList
else:
uiProps["values"] = valuesMap
return True
# --------------------------------------------------------------------------
# Handle ArraySelectionDomain
# --------------------------------------------------------------------------
[docs]def arraySelectionDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["type"] = "str"
uiProps["widget"] = "list-n"
valuesList = []
for arnum in range(domain.GetNumberOfStrings()):
valuesList.append(domain.GetString(arnum))
uiProps["values"] = valuesList
return True
# --------------------------------------------------------------------------
# Handle IntRangeDomain, DoubleRangeDomain, and ArrayRangeDomain
# --------------------------------------------------------------------------
[docs]def numberRangeDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["widget"] = "textfield"
domainClass = domain.GetClassName()
if domainClass.rfind("Int") >= 0:
uiProps["type"] = "int"
else:
uiProps["type"] = "float"
ranges = []
idx = 0
while domain.GetMinimumExists(idx) == 1 and domain.GetMaximumExists(idx) == 1:
ranges.append({"min": domain.GetMinimum(idx), "max": domain.GetMaximum(idx)})
idx += 1
uiProps["range"] = ranges
if idx == 0:
return False
return True
# --------------------------------------------------------------------------
# Handle ProxyListDomain
# --------------------------------------------------------------------------
[docs]def proxyListDomainDecorator(props, xmlProps, uiProps, domain):
uiProps["widget"] = "list-1"
uiProps["size"] = 1
uiProps["type"] = "proxy"
values = {}
for i in range(domain.GetNumberOfProxies()):
nextProxy = domain.GetProxy(i)
values[nextProxy.GetXMLLabel()] = nextProxy.GetGlobalIDAsString()
uiProps["values"] = values
return True
# --------------------------------------------------------------------------
# Decorate for PropertyWidgetDecorator hint with type="ClipScalarDecorator"
# --------------------------------------------------------------------------
# FIXME: Remove this when GenericDecorator goes into master
[docs]def clipScalarDecorator(prop, uiElt, hint):
proxy = None
try:
proxy = prop.SMProperty.GetParent()
except:
try:
proxy = prop.GetParent()
except:
print("ERROR: unable to get proxy for property " + prop.Name)
return
excludeAttr = hint.GetAttribute("exclude")
if not excludeAttr or excludeAttr != "1":
depends = proxy.GetGlobalIDAsString() + ":ClipFunction:Scalar:1"
else:
depends = proxy.GetGlobalIDAsString() + ":ClipFunction:Scalar:0"
uiElt["depends"] = depends
# --------------------------------------------------------------------------
# Decorate for PropertyWidgetDecorator hint with type="GenericDecorator"
# --------------------------------------------------------------------------
[docs]def genericDecorator(prop, uiElt, hint):
proxy = None
try:
proxy = prop.SMProperty.GetParent()
except:
try:
proxy = prop.GetParent()
except:
print("ERROR: unable to get proxy for property " + prop.Name)
return
mode = hint.GetAttribute("mode")
# For now we just handle visbility mode
if mode == "visibility":
propName = hint.GetAttribute("property")
value = hint.GetAttribute("value")
inverse = hint.GetAttribute("inverse")
visibility = "1"
if not inverse or inverse != "1":
visibility = "1"
else:
visibility = "0"
uiElt["depends"] = "%s:%s:%s:%s" % (
proxy.GetGlobalIDAsString(),
propName,
value,
visibility,
)
# --------------------------------------------------------------------------
# Decorate for Widget hint with type="multi_line"
# --------------------------------------------------------------------------
[docs]def multiLineDecorator(prop, uiElt, hint):
uiElt["widget"] = "textarea"
# --------------------------------------------------------------------------
# Decorate for proxyEditorPropertyWidget hint
# --------------------------------------------------------------------------