예제 #1
0
def make_font_setter(fn, const_text="", var_text="", ddl_size="auto"):
    from thorpy.elements.launchers.dropdownlistlauncher import DropDownListLauncher
    from thorpy.miscgui.reaction import Reaction
    from thorpy.miscgui.metadata import MetaDataManager
    import os, sys
    titles = list(constants.AVAILABLE_FONTS)
    titles.sort()
    button = DropDownListLauncher.make(const_text,
                                       var_text,
                                       titles,
                                       show_select=False,
                                       ddlf_size=ddl_size)

    def reac_func(event):
        font = event.value
        mdm = MetaDataManager()
        mdm.read_data(fn)
        mdm.data["font"] = font
        mdm.write_data(fn)
        #restart script
        python = sys.executable
        os.execl(python, python, *sys.argv)

    reac = Reaction(constants.THORPY_EVENT, reac_func, {
        "id": constants.EVENT_DDL,
        "el": button
    })
    button.add_reaction(reac)
    return button
예제 #2
0
def make_font_setter(fn, const_text="", var_text="", ddl_size="auto"):
    from thorpy.elements.launchers.dropdownlistlauncher import DropDownListLauncher
    from thorpy.miscgui.reaction import Reaction
    from thorpy.miscgui.metadata import MetaDataManager
    import os, sys
    titles = list(constants.AVAILABLE_FONTS)
    titles.sort()
    button = DropDownListLauncher.make(const_text, var_text,
                                        titles,
                                        show_select=False,
                                        ddlf_size=ddl_size)
    def reac_func(event):
        font = event.value
        mdm = MetaDataManager()
        mdm.read_data(fn)
        mdm.data["font"] = font
        mdm.write_data(fn)
        #restart script
        python = sys.executable
        os.execl(python, python, * sys.argv)
    reac = Reaction(constants.THORPY_EVENT, reac_func, {"id":constants.EVENT_DDL,
                                                        "el":button})
    button.add_reaction(reac)
    return button
예제 #3
0
def get_handler_for(variable):
    type_ = type(variable.value)
    value = variable.value
    text = variable.text
    limits = variable.limits
    handler_type = variable.handler_type
    more = variable.more
    handler = None
    if handler_type:
        if handler_type == "color choice":
##            cs = ColorSetter(text=text, value=value)
            handler = ColorSetterLauncher(value, text)
        elif handler_type == "file choice":
            limits.setdefault("launcher", False)
            limits.setdefault("light", True)
            limits.setdefault("ddl_size", None)
            limits.setdefault("folders", True)
            limits.setdefault("file_types", None)
            limits.setdefault("files", True)
            if limits["light"]:
                handler = BrowserLight(text=text, path=value,
                                     ddl_size=limits["ddl_size"],
                                     folders=limits["folders"],
                                     files=limits["files"],
                                     file_types=limits["file_types"])
            else:
                handler = Browser(text=text, path=value,
                                 ddl_size=limits["ddl_size"],
                                 folders=limits["folders"],
                                 files=limits["files"],
                                 file_types=limits["file_types"])
        else:
            handler = obtain_valid_object(handler_type, value=value, type_=type_,
                                          text=text, limits=limits)
    elif type_ is tuple:
        if len(value) == 3:
##            handler = ColorSetter(text=text, value=value)
            handler = ColorSetterLauncher(value, text, finish=False)
    elif type_ is list:
        var_text = more.get("var_text", value[0])
        ddlf_size = more.get("ddlf_size", "auto")
        handler = DropDownListLauncher(const_text=text, var_text=var_text,
                                        titles=value, ddlf_size=ddlf_size,
                                        finish=False)
    elif ((type_ is str) or not(limits)) and not(type_ is bool):
        if not(limits) or isinstance(limits,str):
            ilimits = (None, None)
        else:
            ilimits = limits
        handler = Inserter(text, value=str(value), value_type=type_,
                            size=ilimits, finish=False)
        if limits == "float":
            handler.numeric_only = True
            handler.int_only = False
            handler._value_type = float
        elif limits == "int":
            handler.numeric_only = True
            handler.int_only = True
            handler._value_type = int
    elif (type_ is int) or (type_ is float):
        length = more.get("length", 100)
        handler = SliderXSetter(length,
                                limits,
                                text,
                                type_=type_,
                                initial_value=value,
                                finish=False)
    elif type_ is bool:
        handler = Checker(variable.text, value=variable.value, finish=False)
    if handler:
        handler.rank = variable.rank
        return handler
    else:
        raise Exception(
            "Variable doesn't have default handler: " +
            str(text))