Attached is a set of text input templates that I am using in my project.
Caption = text displayed in upper right corner
Required = input must have a non-zero length string or non-zero value
Value = current value of input
WantFocus = does this input want keyboard focus
And some code that I use to interact with these components:
from com.inductiveautomation.factorypmi.application.script import PyComponentWrapper #thanks Nick
from com.inductiveautomation.factorypmi.application.components.template import TemplateHolder
def focusInput():
wHandle = shared.nav.getCurrentWindow()
components = wHandle.rootContainer.getComponents()
for component in components:
if _giveFocus(component):
return
if isinstance(component,TemplateHolder):
for templateHolder in component.getComponents():
for templateComponent in templateHolder.getComponents():
templateComponent = PyComponentWrapper(templateComponent)
if(_giveFocus(templateComponent)):
return
def _giveFocus(component):
if hasattr(component,"WantFocus"):
if(component.WantFocus):
shared.developer.logDebug("Giving input focus to %s" % component.name)
component.SetFocus()
return True
return False
def _forceFocus(component):
if hasattr(component,"WantFocus"):
shared.developer.logDebug("Forcing input focus to %s" % component.name)
component.SetFocus()
return True
return False
def areInputsValid(setFocus = True):
focused = not setFocus
result = True
wHandle = shared.nav.getCurrentWindow()
if(wHandle != None):
components = wHandle.rootContainer.getComponents()
for component in components:
if(not _isValid(component)):
result = False
if(not focused):
focused = _forceFocus(component)
if isinstance(component,TemplateHolder):
for templateHolder in component.getComponents():
for templateComponent in templateHolder.getComponents():
templateComponent = PyComponentWrapper(templateComponent)
if(not _isValid(templateComponent)):
result = False
if(not focused):
focused = _forceFocus(templateComponent)
return result
def _isValid(component):
if hasattr(component,"IsValid"):
if(not component.IsValid):
shared.developer.logDebug("Invalid input found: %s" % component.name)
component.Flash()
return False
return True