UI = { }
UI.root = getRootWidget()

-- public functions
function UI.display(arg1, options)
  local widget
  local parent
  if options then parent = options.parent end
  parent = parent or UI.root

  -- display otui files
  if type(arg1) == 'string' then
    local otuiFilePath = resolveFileFullPath(arg1, 2)
    widget = loadUI(otuiFilePath, parent)
  -- display already loaded widgets
  else
    widget = arg1
    if parent:hasChild(widget) then
      widget:focus()
      widget:show()
    else
      parent:addChild(widget)
      widget:show()
    end
  end

  -- apply display options
  if widget and options then
    for option,value in pairs(options) do
      if option == 'locked' and value then
        widget:lock()
      elseif option == 'visible' then
        widget:setVisible(value)
      end
    end
  end
  return widget
end
