Differences From Artifact [fd35fa0517]:

To Artifact [579f93bf8f]:


48
49
50
51
52
53
54
55
56


57
58

59
60

61
62

63
64

65
66

67
68

69
70
71


72
73
74
75
76
77
78
79
80
81
48
49
50
51
52
53
54


55
56


57


58


59


60


61


62



63
64



65
66
67
68
69
70
71







-
-
+
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
-
+
+
-
-
-







    Reads *.py files and crafts a settings dialog from meta data.

    Where `plugin_states{}` is usually an entry in `config{}` itself. Depending on plugin
    and option names, it might even be a flat/shared namespace for both. Per default you'd
    set `files=["plugins/*.py", __file__]` to be read. But with `files=[]` it's possible to
    provide a `plugins=pluginconf.get_plugin_meta()` or prepared plugin/options dict instead.

    Parameters
    ----------
    | Params        | | |
    |---------------|---------|---------------------------------------------------------|
    config : dict 🔁
        Config settings, updated after dialog completion
    | config        | dict 🔁 | Config settings, updated after dialog completion        |
    plugin_states : dict 🔁
        Plugin activation states, also input/output
    | plugin_states | dict 🔁 | Plugin activation states, also input/output             |
    files : list
        Glob list of *.py files to extract meta definitions from
    | files         | list    | Glob list of *.py files to extract meta definitions from|
    plugins : dict
        Alternatively to files=[] list, a preparsed list of pluginmeta+config dicts can be injected
    | plugins       | dict    | Alternatively to files=[] list, a preparsed list of pluginmeta+config dicts can be injected |
    opt_label : bool
        Show config name= as label
    | opt_label     | bool    | Show config name= as label (instead of description)     |
    theme : str
        Set PSG window theme.
    | theme         | str     | Set PSG window theme.                                   |
    **kwargs : dict
        Other options are passed on to PySimpleGUI

    | **kwargs      | dict    | Other options are passed on to PySimpleGUI              |
    | **Returns**   | True    | if updated config{} values should be [Saved]            |
    Returns
    -------
    True : if changed config{} values are to be saved (the dict will be updated in any case)
    """
    plugins = kwargs.get("plugins", {})
    opt_label = kwargs.get("opt_label", False)
    theme = kwargs.get("theme", "DefaultNoMoreNagging")
    if theme:
        if "theme" in kwargs:
            del kwargs["theme"]
110
111
112
113
114
115
116
117

118
119
120
121
122
123
124
100
101
102
103
104
105
106

107
108
109
110
111
112
113
114







-
+







                if plugins.get(key):
                    plugin_states[key] = val
        return True
    #print(config, plugin_states)


def plugin_layout(pmd_list, config, plugin_states, opt_label=False):
    """ craft list of widgets for each read plugin """
    """ craft list of widgets: \*( `plugin_entry`, \*`option_entry` )"""
    layout = []
    for plg in pmd_list:
        #print(plg.get("id"))
        layout = layout + plugin_entry(plg, plugin_states)
        for opt in plg["config"]:
            if opt.get("name"):
                if opt_label: