def Widget(option_name, value): """ :return: create a widget which permit to edit the value with a label """ # TODO: Currently an evaluation is used to guess value type. # This approach may fails for complex data # We need to improve option type management, for example by providing an associated map "option_name -> type". # We should also add constraints on values try: eval_value = ast.literal_eval(value) except (ValueError, SyntaxError): eval_value = value inames = guess_interface(eval_value) if len(inames): iname = inames[0] else: iname = 'IStr' # Dirty hack to handle int constraints on font size. if 'font' in option_name and iname == 'IInt': iname = new_interface(iname, min=5, max=200) control = Control(option_name, iname, eval_value) editor = qt_editor(control) return control, editor
def __init__(self, name, interface=None, value=None, widget=None, constraints=None, **kwds): """ :param name: Control name :type name: basestring :param interface: Interface name or class :type interface: basestring or :class:`openalea.core.interface.IInterface` :param value: value to initialise control [Default: use interface default value]. :type value: value compatible with interface :param widget: name of preferred widget [Default: undefined] :type widget: basestring :param constraints: constraints to set to interface. See Interface documentation [Def: no constraints] :type constraints: :obj:`dict` """ Observed.__init__(self) self.name = name self.widget = widget if constraints is None: constraints = {} self._interface = new_interface(interface, value, **constraints) self._value = value if value is None: self._value = interface_default_value(self._interface) self._alias = kwds.get("alias", None) self._default_value = kwds.get("default", self._value)
def test_new_and_get_class(): iclass1 = interface_class('IInt') assert interface_class(iclass1) == iclass1 assert issubclass(iclass1, IInterface) iname0 = 'IInt' iname1 = interface_name(iname0) iname2 = interface_name(iclass1) iname3 = interface_name(iclass1()) iname4 = interface_name(int) iname5 = interface_name('int') assert iname1 == iname0 assert iname2 == iname0 assert iname3 == iname0 assert iname4 == iname0 assert iname5 == iname0 interface1 = new_interface(iname1, min=1, max=1) interface2 = new_interface(iclass1, min=1, max=2) interface3 = new_interface(interface2, min=1, max=3) interface4 = new_interface(iname1, 1, min=1, max=4) interface5 = new_interface(value=1, min=1, max=5) assert isinstance(interface1, iclass1) assert isinstance(interface2, iclass1) assert isinstance(interface3, iclass1) assert isinstance(interface4, iclass1) assert isinstance(interface5, iclass1) # Warning, normal behaviour is to keep interface unchanged if interface is yet an instance assert(interface3.max == 2) assert(interface1.max == 1) assert(interface2.max == 2) assert(interface4.max == 4) assert(interface5.max == 5)
def __init__(self, name, interface=None, value=None, widget=None, constraints=None, **kwds): """ :param name: Control name :type name: basestring :param interface: Interface name or class :type interface: basestring or :class:`openalea.core.interface.IInterface` :param value: value to initialise control [Default: use interface default value]. :type value: value compatible with interface :param widget: name of preferred widget [Default: undefined] :type widget: basestring :param constraints: constraints to set to interface. See Interface documentation [Def: no constraints] :type constraints: :obj:`dict` """ Observed.__init__(self) self.name = name self.widget = widget if constraints is None: constraints = {} self._interface = new_interface(interface, value, **constraints) self._value = value if value is None: self._value = interface_default_value(self._interface) self._label = kwds.get('label', None) self._default_value = kwds.get('default', self._value)
parser.add_argument('--list-interface-widgets', dest='list_interface_widgets', action='store_true', help='list all known interfaces') args = parser.parse_args() if args.list_interfaces or args.list_interface_widgets: inames = [interface.__name__ for interface in interfaces()] for interface in sorted(interfaces()): print '\033[41m', interface, '\033[0m', interface.__module__ if args.list_interface_widgets: widgets = scontrol.qt_widget_plugins(interface.__name__) if widgets: for plugin in widgets: w = plugin.load() print ' \033[36m%s\033[0m\n plugin: %s\n widget: %s)' % (plugin.name, plugin, w) else: instance = QtGui.QApplication.instance() if instance is None: app = QtGui.QApplication([]) else: app = instance interface = new_interface(args.iname, value=eval(args.value), **eval(args.constraints)) control = Control('a', interface, value=eval(args.value), widget=args.widget) w = CheckSizes(control, sys.argv[2:]) w.show() w.raise_() if instance is None: app.exec_()
inames = [interface.__name__ for interface in interfaces()] for interface in sorted(interfaces()): print '\033[41m', interface, '\033[0m', interface.__module__ if args.list_interface_widgets: widgets = scontrol.qt_widget_plugins(interface.__name__) if widgets: for plugin in widgets: w = plugin.load() print ' \033[36m%s\033[0m\n plugin: %s\n widget: %s)' % ( plugin.name, plugin, w) else: instance = QtGui.QApplication.instance() if instance is None: app = QtGui.QApplication([]) else: app = instance interface = new_interface(args.iname, value=eval(args.value), **eval(args.constraints)) control = Control('a', interface, value=eval(args.value), widget=args.widget) w = CheckSizes(control, sys.argv[2:]) w.show() w.raise_() if instance is None: app.exec_()