示例#1
0
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
示例#2
0
    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)
示例#3
0
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)
示例#4
0
    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)
示例#5
0
    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_()
示例#6
0
        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_()