
# Custom settings store

init offset = -10

default persistent.custom_settings = {}
default persistent.custom_settings_default = {}

init python in settings:
    from store import persistent, Action, DictEquality

    not_set = object()

    prefs = persistent.custom_settings
    defaults = persistent.custom_settings_default

    def default(name, default):
        value = defaults.get(name, not_set)
        if value == not_set or value != default:
            defaults[name] = default
            set(name, default)

    def get(name):
        return prefs[name]

    def set(name, value):
        prefs[name] = value

    def toggle(name, a, b):
        value = prefs.get(name, not_set)
        prefs[name] = a if value != a else b

    def reset(name):
        default = defaults.get(name, not_set)
        if default != not_set:
            prefs[name] = default

    class Set(Action, DictEquality):
        def __init__(self, name, value):
            self.name = name
            self.value = value

        def __call__(self):
            set(self.name, self.value)
            renpy.restart_interaction()

        def get_selected(self):
            return prefs.get(self.name, not_set) == self.value

    class Reset(Action, DictEquality):
        def __init__(self, name):
            self.name = name

        def __call__(self):
            reset(self.name)
            renpy.restart_interaction()

        def get_sensitive(self):
            return prefs.get(self.name, not_set) != defaults.get(self.name, not_set)

    class Toggle(Action, DictEquality):
        def __init__(self, name, true_value=True, false_value=False):
            self.name = name
            self.true_value = true_value
            self.false_value = false_value

        def __call__(self):
            toggle(self.name, self.true_value, self.false_value)
            renpy.restart_interaction()

        def get_selected(self):
            return prefs[self.name] == self.true_value
