module declgtk.componentproxy;

import declui.backend;

struct ComponentProxy(Type, args...)
{
    private Type _value;
    private void delegate(Type)[] _queue;

    public void queue(void delegate(Type) callback)
    {
        _queue ~= callback;
    }

    public void execute()
    {
        createValue();
        foreach (callback; _queue)
        {
            callback(_value);
        }
    }

    private void createValue()
    {
        if (_value !is null)
            return;
        _value = new Type(args);
    }
}